2011-06-27 10 views
7

मेरे ओपनजीएल शोध (ओपनजीएल रेड बुक, मुझे लगता है) में मैं एक "ऊपरी भुजा", एक "निचला हाथ", एक "हाथ" युक्त एक articulating रोबोट बांह के एक मॉडल के उदाहरण में आया था। , और पांच या अधिक "उंगलियों"। प्रत्येक वर्ग स्वतंत्र रूप से स्थानांतरित करने में सक्षम होना चाहिए, लेकिन "जोड़ों" (ऊपरी और निचले "हथियार" से बाधित होना हमेशा "कोहनी" पर जुड़ा होता है)।आधुनिक ओपनजीएल प्रश्न

तत्काल मोड (ग्लोबजिन/ग्लेंड) में, वे "सदस्य" नामक घन के एक जाल का उपयोग करते हैं, और हाथ, हाथ इत्यादि के प्रत्येक हिस्सों के लिए इस एकल जाल की स्केल की गई प्रतियों का उपयोग करते हैं। "आंदोलन" निम्नलिखित जोड़ों में से प्रत्येक के लिए रूपांतरण मैट्रिक्स स्टैक पर घूर्णन को दबाकर पूरा किया गया था: कंधे, कोहनी, कलाई, नाक - आपको तस्वीर मिलती है।

अब, यह समस्या हल करता है, लेकिन चूंकि यह पुराने, बहिष्कृत तत्काल मोड का उपयोग कर रहा है, मैं अभी तक आधुनिक ओपनजीएल संदर्भ में इस समस्या का समाधान नहीं समझता हूं। मेरा सवाल है: आधुनिक ओपनजीएल का उपयोग करके इस समस्या से कैसे संपर्क करें? विशेष रूप से, क्या प्रत्येक व्यक्ति "सदस्य" अपने वर्तमान परिवर्तन मैट्रिक्स का ट्रैक रखना चाहिए क्योंकि मैट्रिक्स स्टैक अब कोशेर नहीं हैं?

उत्तर

3

बहुत अधिक। यदि आपको वास्तव में इसकी आवश्यकता है, तो अपने स्वयं के ढेर-जैसे इंटरफेस को लागू करना बहुत आसान है। आप सचमुच केवल एक स्टैक स्टोर करेंगे, फिर अपनी पसंदीदा गणित लाइब्रेरी का उपयोग करके आपको जो भी मैट्रिक्स ऑपरेशंस चाहिए, उसे लागू करें, और स्टैक के शीर्ष तत्व का उपयोग करके अपनी वांछित मैट्रिक्स वर्दी को प्रारंभ करने का कोई तरीका है।

अपने रोबोट बांह उदाहरण में, मान लीजिए कि प्रत्येक शरीर के बीच निर्दिष्ट सापेक्ष परिवर्तनों के साथ, लिंक को पेड़ के रूप में दर्शाया जाता है (या यदि आप चाहें तो ग्राफ भी)। रोबोट बांह को आकर्षित करने के लिए, आप बस इस डेटा संरचना का एक ट्रैवर्सल करते हैं और अपने शरीर के शरीर को बदलने के लिए पैरेंट बॉडी के परिवर्तन के रूप में परिवर्तन करते हैं। उदाहरण के लिए:

def draw_linkage(body, view): 

    //Draw the body using view matrix 

    for child, relative_xform in body.edges: 

     if visited[child]: 
      continue 

     draw_linkage(child, view * relative_xform) 
1

जोड़ों से जुड़े कठोर भागों के मामले में, आमतौर पर प्रत्येक भाग को व्यक्तिगत विभाजन के रूप में व्यवहार करता है, ड्राइंग से पहले उचित मैट्रिक्स लोड करता है।

"जुड़ा"/"सतत" meshes के मामले में, एक चेहरा की तरह, एनीमेशन आमतौर पर हड्डियों और विरूपण लक्ष्य के माध्यम से होता है। उनमें से प्रत्येक एक विकृति को परिभाषित करता है और जाल में हर चरम को वजन दिया जाता है, यह प्रत्येक विकृतियों द्वारा कितना मजबूत होता है। तकनीकी रूप से इसे एक कठोर अंग मॉडल पर भी लागू किया जा सकता है, प्रत्येक अंग को एक विकृत नॉनजेरो भारोत्तोलन भी प्रदान किया जा सकता है।

कोई भी सभ्य एनीमेशन सिस्टम वैसे भी ट्रांसफॉर्मेशन (मैट्रिस) का ट्रैक रखता है, ओपनजीएल मैट्रिक्स स्टैक फ़ंक्शंस का शायद ही कभी गंभीर अनुप्रयोगों में उपयोग किया जाता है (चूंकि ओपनजीएल का आविष्कार किया गया था)। लेकिन आम तौर पर परिवर्तन एक पदानुक्रम में संग्रहित होते हैं।

1

आप आमतौर पर एक दृश्यग्राफ का उपयोग करके ओपनजीएल के ऊपर एक स्तर पर ऐसा करते हैं।

वही मैट्रिक्स दृश्यग्राफ पेड़ में प्रत्येक नोड पर बदलता है बस बस ओपनजीएल मैट्रिक्स पर मानचित्र करता है, इसलिए यह बहुत ही कुशल है।

संबंधित मुद्दे