2012-11-17 18 views
6

हम कैनवास में 3 डी ट्रांसफॉर्मेशन करने के लिए Camera का उपयोग करते हैं। हम आम तौर पर कैमरे को घुमाते हैं और इसे मैट्रिक्स प्राप्त करते हैं और फिर इसका अनुवाद करते हैं। लेकिन कैमरा में translate विधि भी है। विधियों का उपयोग करने के परिणाम अलग-अलग हैं।कैमरा.ट्रांसलेट और Matrix.preTranslate या Matrix.postTranslate के बीच अंतर?

मेरा प्रश्न है: कैमरा.ट्रांसलेट और मैट्रिक्स.preTranslate या Matrix.postTranslate के बीच क्या अंतर है?

उत्तर

4

दोनों कारण हैं, क्योंकि मैट्रिक्स गुणा उचित परिणाम प्राप्त करने के लिए एक निश्चित क्रम में किया जाना चाहिए (जैसा कि आप पहले ही जानते हैं)।

अनुवाद/रोटेशन/स्केल का अनुक्रम क्रम में क्रमबद्ध करने के क्रम में किया जाता है।

तो तुम कुछ इस तरह करते हैं:

Camera.rotate(15, 0, 0); 
Camera.scale(.5f, .5f, .5f); 
Camera.translate(70, 70, 70); 

आप पहली बार 70,70,70 अनुवाद कर रहे तो सभी दिशाओं में 50% से स्केलिंग, तो एक्स अक्ष के बारे में 15 डिग्री घूर्णन।

तो मैट्रिक्स में एक पूर्व और पोस्ट अनुवाद (अच्छी तरह से, पूर्व और पोस्ट सब कुछ) है, क्योंकि हो सकता है कि आप वास्तव में इसे पहले 15 डिग्री से घुमाएं और फिर इसका अनुवाद करें, और फिर अंततः इसे स्केल करें।

ताकि पूर्व और पोस्ट अनुवादों का उत्तर दिया जा सके। अब कैमरा का सीधा घुमाव और अनुवाद लोगों के लिए है जो जानते हैं कि यह पहले से ही कैसे काम करता है (जैसे मेरे!), इसलिए मैं उस मामले के लिए मैट्रिक्स या कैमरा का कभी भी उपयोग नहीं करता, क्योंकि मैं सीधे कैनवास पर अपने घूर्णन और अनुवाद कर सकता हूं। आप तब तक भी कर सकते हैं जब तक आप जानते हैं कि अनुवाद, तराजू और घूर्णन विपरीत क्रम में किए जाते हैं।

इसके अलावा, अगर आपको पता है कि मैंने आपको क्या बताया है, तो यह आपको अधिक शक्ति देता है। आप प्रत्येक के लिए एकाधिक मैट्रिक्स ऑब्जेक्ट्स में उनके आस-पास के बिना 10 मैट्रिक्स का अनुक्रम कर सकते हैं (उदाहरण के लिए आप एक स्विंग गति करना चाहते हैं जो बाहरी रूप से स्विंग करता है और केन्द्रापसारक बल अनुकरण करने के लिए केंद्र के बारे में घूमता है)। इसे एकाधिक घूर्णन और अनुवादों के साथ किया जाना चाहिए (एकाधिक मैट्रिक्स ऑब्जेक्ट्स को एक दूसरे में पारित किया जा रहा है), लेकिन यदि आप जानते हैं कि प्रत्येक अनुवाद कैसे काम करता है, तो आप बस .translate(), .rotate() की एक श्रृंखला कर सकते हैं, और। स्केल()।

यह जानकारी विशेष रूप से उपयोगी होती है यदि आप कभी भी 3 डी ग्राफिक्स करते हैं, क्योंकि यह तब होता है जब ये matrices लोगों को सिरदर्द देते हैं।

मुझे आशा है कि इससे मदद मिलती है!

+1

क्या आप मुझे ऐसे दस्तावेज में मार्गदर्शन करते हैं जिसे आपने यह तथ्य पाया है? – hasanghaforian

+0

क्या आप एक लिंक दे सकते हैं जो आपके उत्तर का समर्थन करता है? –

+0

ओह माय। यह लिखने के बाद से काफी समय हो गया है, और यह कम से कम कहने के लिए घमंडी लगता है। दस्तावेज विकिपीडिया पर पाया जा सकता है, विशेष रूप से: http://en.wikipedia.org/wiki/Transformation_matrix#Composing_and_inverting_transformations "ध्यान दें कि गुणा अंग्रेजी वाक्य से विपरीत क्रम में किया जाता है:" ए के मैट्रिक्स बी द्वारा "बीए है, एबी नहीं।" –

1

परिणाम अगर आप अर्थात कैनवास स्पर्श नहीं करते हैं लेकिन कैमरा 90 degs बारी बारी से या कैमरा अभी भी रखते हैं लेकिन कैनवास यह -90 degs द्वारा पर लग रहा है बारी बारी से नेत्रहीन ही होगा।

+1

क्या आप 'एंड्रॉइड.कैनवास' पर 3 डी में किसी भी अच्छे दस्तावेज़ या ट्यूटोरियल को जानते हैं? ऐसा लगता है कि 'जादू' और 'surd'। – hasanghaforian