2011-11-06 9 views
5

मैं अपने 3 डी गेम के लिए एक दृश्य ग्राफ बनाने की कोशिश कर रहा हूं जिसमें प्रत्येक ऑब्जेक्ट के परिवर्तन इसके माता-पिता के सापेक्ष हैं। ग्राफ के प्रत्येक नोड में एक रोटेशन, स्केलिंग और अनुवाद वेक्टर होता है।पूर्ण परिवर्तनों के लिए 3 डी सापेक्ष

किसी ऑब्जेक्ट का पूर्ण परिवर्तन प्राप्त करने के लिए सापेक्ष परिवर्तन matrices के संयोजन का सही तरीका क्या है? अगर आप अपने समाधान की व्याख्या भी कर सकते हैं तो मुझे खुशी होगी।


यहाँ क्या करने का एक उदाहरण है यह गलत:
यह वास्तव में निकला समाधान:

Matrix GetAbsoluteTransformation() 
{ 
    if (!this.IsRoot()) 
    { 
     return this.Transformation * this.Parent.GetAbsoluteTransformation(); 
    } 
    else 
    { 
     return this.Transformation; 
    } 
} 

इस मामले में, जब माता पिता नोड घुमाया जाता है, स्केल या चले गए, बच्चे को वही राशि बदल दी गई है, जो एक सही व्यवहार है! लेकिन बच्चा केवल अपनी उत्पत्ति के चारों ओर घूमता है और माता-पिता की उत्पत्ति के चारों ओर नहीं चलता है।


आवेदन:

चार पहियों के साथ एक कार मॉडल नहीं है। पहियों कार के मूल के चारों ओर सापेक्ष स्थित हैं। पहिये असली पहियों की तरह घुमा सकते हैं। अगर अब मैं कार घुमाता हूं, तो पहियों को हमेशा इसके साथ जुड़े रहना चाहिए। इस मामले में कार जड़ है और पहियों बच्चे नोड्स हैं।

एक और उदाहरण सौर मंडल का एक मॉडल होगा। ग्रह अपने स्वयं के धुरी के चारों ओर घूमते हैं, सूरज के चारों ओर घूमते हैं, और चन्द्रमा ग्रहों के चारों ओर घूमते हैं।

+0

यह पता चला कि मेरा पहला विचार यह कैसे करना है, जिसे मैंने तब उपयुक्त नहीं माना, वास्तव में समाधान था! मैंने पिछले कुछ घंटों को हल करने की कोशिश की। * फेसपाल्म * त्वरित और सटीक सहायता के लिए सभी को धन्यवाद! – Lucius

उत्तर

3

के साथ के संबंध अपने, मैं तुम्हें करने के लिए इसे तोड़ने के लिए नफरत है, लेकिन यह गलत नहीं है "कैसे यह गलत करने के लिए"; बल्कि, यह अपूर्ण है। आपको माता-पिता के बच्चों के रिश्ते से स्वतंत्र रूप से उन प्रकार के काम करने की ज़रूरत है।

यहां इसका एक उदाहरण दिया गया है: जैसा कि आपने बताया है, पहिया कार से जुड़ा हुआ है। यदि आप कार का अनुवाद या घुमाते हैं, तो आपको पहियों को छूने की आवश्यकता नहीं है - वे कार से संबंधित स्थान पर हैं। हालांकि, जब आप 'वास्तविक दुनिया' में पहिया का नया स्थान प्राप्त करने का प्रयास करते हैं, तो आपको पेड़ को पार करना होगा, मैट्रिक्स ट्रांसफॉर्मेशन को लागू करते समय लागू करना होगा। वह सब काम करता है, है ना?

जब आप किसी वस्तु को घुमाते हैं, तो यह अपने ओडब्ल्यूएन मूल के चारों ओर घूमता है। तो एक पहिया शायद अपने वाई अक्ष के चारों ओर घूमना चाहिए, और इसके z अक्ष के चारों ओर एक ग्रह। लेकिन अब अगर आपको "सूर्य के चारों ओर" ग्रह को स्थानांतरित करने की आवश्यकता है, तो आप कुछ अलग कर रहे हैं। इसे अलग से गणना की जानी चाहिए। ऐसा नहीं है कि आपके पास पहले से मौजूद एक ही मैच का उपयोग करके इसे आसान नहीं किया जा रहा है, (हालांकि मैं स्वयं गणित किए बिना निश्चित रूप से नहीं कह सकता) लेकिन यह पूरी तरह से अलग है।

आप वास्तव में वस्तु की स्थिति को बदल रहे हैं। यह दृश्य ग्राफ की सुंदरता है! यदि आपके पास दृश्य ग्राफ नहीं था, तो आपको मुख्य दृश्य पर सभी तरह के सभी मूल्यों को समझना होगा और फिर सभी प्रकार के गणित करना होगा। यहां, आपको बस ग्रह के चारों ओर स्थानांतरित करने के लिए ट्रिगर और बीजगणित का थोड़ा सा करना है (आप खगोलीय यांत्रिकी को Google कर सकते हैं) और ग्रह को अपने स्टार के सापेक्ष स्थानांतरित कर सकते हैं। अगली बार जब मुख्य दृश्य पूछता है कि ग्रह कहां है, तो यह दृश्य ग्राफ नीचे जाएगा! :- डी

+0

मैं इसे सबसे अच्छा जवाब के रूप में चुनता हूं। मेरा मूल दृष्टिकोण सही था और अब मुझे नहीं पता कि मैंने इसे गलत क्यों माना (बहुत सरल?: डी) आप ग्रहों के घूर्णन के बारे में भी सही हैं: अब मैंने एक अतिरिक्त नोड शामिल किया जो सूरज के चारों ओर घूर्णन को संभालता है। आपका बहुत बहुत धन्यवाद! – Lucius

+0

यदि सूरज घूमता है तो ग्रह इस मैट्रिक्स बीजगणित के साथ घूमते रहेंगे। फॉरवर्ड किनेमेटिक्स .. – stefan

+0

@ स्टेफन तो जाहिर है कि सूर्य बस सौर मंडल का बच्चा होना चाहिए क्योंकि ग्रह है, और मूल में केंद्रित है। – corsiKa

1

मुझे लगता है कि यह सही व्यवहार है।

मुझे नहीं लगता कि माता-पिता की उत्पत्ति के चारों ओर घुमावदार कुछ ऐसा है जो एक साधारण मैट्रिक्स स्टैक के साथ पूरा किया जा सकता है। मुझे लगता है कि आप केवल माता-पिता से बच्चों तक प्रचार कर सकते हैं।

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

यहाँ एक समान सवाल है: Getting absolute position and rotation from inside a scene graph?

+0

धन्यवाद! यह भी सही है! :) – Lucius

1

यह इस बात पर निर्भर करता है कि आप OpenGL या Direct3D का उपयोग कर रहे हैं या नहीं। ओपनजीएल में, ट्रांसफॉर्म को दाएं से बाएं लागू होते हैं, जबकि डायरेक्ट 3 डी में, वे बाएं से दाएं लागू होते हैं। वे ट्रांसफॉर्म सिस्टम को डिजाइन करने के पूरी तरह से वैध तरीके हैं, लेकिन इसका मतलब है कि आपको उनके बारे में अलग-अलग सोचना होगा।

मुझे ओपनजीएल सिस्टम में सोचने के लिए सबसे आसान लगता है, लेकिन विपरीत में। इस बारे में सोचने के बजाय कि ऑब्जेक्ट के शिखर को बदलने के रूप में कैसे स्थानांतरित किया जाता है, बाएं से दाएं क्रम में परिवर्तित होने वाली वस्तु के समन्वय प्रणाली समन्वय प्रणाली की कल्पना करता है। प्रत्येक ट्रांसफॉर्म को नए स्थानीय समन्वय प्रणाली के सापेक्ष लागू किया जाता है, न कि दुनिया के सापेक्ष।

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

+0

मुझे यकीन नहीं है कि यह उत्तर पूरी तरह से मेरे प्रश्न के अनुरूप है या नहीं। लेकिन फिर भी, मुझे अभी तक इस अंतर के बारे में पता नहीं था, इसलिए धन्यवाद! :) – Lucius

+0

मेरा मानना ​​है कि ये डिफ़ॉल्ट हैं, और यदि आवश्यक हो तो आप उन्हें फ़्लिप कर सकते हैं। कम से कम मुझे यकीन है कि आप ओपनजीएल में कर सकते हैं। –

+0

@user मार्सेलोस उत्तर से दूर जाने के लिए सबसे अच्छी बात यह है कि डेवलपर्स के सैकड़ों हजारों (शायद लाखों) द्वारा उपयोग किए जाने वाले बहुत सारे ढांचे हैं, और आपको उन लोगों में से एक का उपयोग करना चाहिए जो भारी भारोत्तोलन करने के लिए करते हैं आपकी प्रणाली। न केवल वे आपको कई घंटों के डिबगिंग (नोट, आपके स्वयं को बनाने के लिए कई घंटे लगेंगे) बचाएंगे, लेकिन आपके पास अपने रेज़्यूमे पर एक बहुत ही विपणन योग्य और आकर्षक कौशल भी होगा! – corsiKa

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