2009-08-20 9 views
6

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

अब मैं घूर्णन, प्रक्षेपण और अनुवाद की मूल बातें समझता हूं लेकिन मैं समझ नहीं पा रहा हूं कि व्यू मैट्रिक्स XNA में कैसे काम करता है।

जो मैंने एकत्र किया है, उससे दृश्य मैट्रिक्स को "दुनिया" को अपनी जगह पर बदलना चाहिए। उचित लगता है, लेकिन पुस्तकालय में Matrix.CreateLookAt विधि काफी परेशान है।

मैं स्थापित कर लिया है (क्या पुस्तकालय समारोह आउटपुट की जांच के माध्यम से) कि कोड उपज के इन दो टुकड़े एक ही परिणाम:

Matrix view = Matrix.CreateReflection(new Plane(Vector3.UnitX, 0)) * Matrix.CreateReflection(new Plane(Vector3.UnitZ, 0)) * Matrix.CreateTranslation(Position); 
// ..equals this if (Position = (0 0 -5), since LookAt "looks at" but the above just looks straight down Z).. 
Matrix blah = Matrix.CreateLookAt(Position, Vector3.Zero, Vector3.UnitY); 

क्यों एक्स और जेड अक्ष फ्लिप? मैंने सोचा कि आपको कैमरे के घूर्णन के अनुसार दुनिया को घूमना चाहिए, लेकिन विपरीत दिशा में, और फिर विपरीत दिशा में उसी राशि से दुनिया का अनुवाद करें।

या दृश्य मैट्रिक्स को एक परिवर्तन के रूप में उपयोग नहीं किया गया है, लेकिन दुनिया में कैमरे की स्थिति और घूर्णन को एन्कोड करता है?

उत्तर

5

व्यू मैट्रिक्स दृश्य को दृश्य स्थान में बदल रहा है। दृश्य स्थान में वर्चुअल कैमरा मूल पर है और सकारात्मक जेड-दिशा में देख रहा है। इसे प्राप्त करने के कई तरीके हैं, लेकिन आमतौर पर व्यू मैट्रिक्स में प्रत्येक अक्ष के चारों ओर एक अनुवाद और तीन घूर्णन होते हैं।

रूपांतरण = अनुवाद * RotationZ * RotationY * RotationX

+0

धन्यवाद, ऐसा लगता है कि मेरा मूल विचार सही था। लेकिन मेरे पास इन सभी अलग समन्वय प्रणालियों को थोड़ा उलझन में था। – Skurmedel

1

दो प्रतिबिंबों को लिखना एक रोटेशन उत्पन्न करता है, अगर मुझे सही ढंग से मेरी ज्यामिति याद है।

+0

दिलचस्प। उपर्युक्त उल्लिखित प्रतिबिंब तब आपके उत्तर के लिए वाई – Skurmedel

21

तीन प्रकार के परिवर्तन हैं जिन्हें आपको समझने की आवश्यकता है: दुनिया, दृश्य और प्रक्षेपण।

दुनिया परिवर्तन मॉडल मॉडल से विश्व अंतरिक्ष में आपके मॉडल को समन्वयित करता है। जब आप किसी मॉडल के शिखर को परिभाषित करते हैं, तो आप उन्हें उस मॉडल की उत्पत्ति के सापेक्ष परिभाषित करते हैं। दुनिया परिवर्तन उन शिखरों को बदल देता है ताकि वे दृश्य में सभी वस्तुओं, यानी विश्व अंतरिक्ष द्वारा साझा की गई उत्पत्ति के सापेक्ष हों।

दृश्य परिवर्तन फिर इन दृश्यों को दृश्य स्थान में बदल देता है। व्यूअर/कैमरा में दृश्य स्थान में स्थिति और अभिविन्यास होता है, और इसका उपयोग दृश्य मैट्रिक्स बनाने के लिए किया जाता है जिसे आप दृश्य में सभी ऑब्जेक्ट्स पर लागू करते हैं। दृश्य स्थान में दर्शक/कैमरा मूल पर है, इसलिए व्यू मैट्रिक्स सभी ऑब्जेक्ट्स को दृश्य स्थान में रखने के लिए अनुवाद करता है और घुमाता है।

अंततः प्रक्षेपण परिवर्तन यह निर्धारित करता है कि कैमरा किस प्रकार के "लेंस" का उपयोग करता है। अब तक हमने केवल वस्तुओं का अनुवाद और घुमाया है, पैमाने या परिप्रेक्ष्य की कोई समझ नहीं है। प्रक्षेपण परिवर्तन एक व्यूइंग फस्टम बनाता है और इस व्यूपोर्ट में शिखर को बदल देता है।

अब आपके प्रश्न के लिए। आप एक्स-अक्ष के बारे में समन्वय प्रणाली को प्रतिबिंबित करते हैं, फिर z-axis और अंततः आप इसका अनुवाद करते हैं। यह लुकैट मैट्रिक्स के समान परिणाम उत्पन्न करने के लिए होता है क्योंकि स्थिति xz- और yz-plane पर है, लेकिन ध्यान दें कि क्या होता है यदि आप स्थिति को एक इकाई को y-axis पर ले जाते हैं। फिर दो मैट्रिक्स बराबर नहीं होंगे

+1

के आसपास 180 डिग्री रोटेशन के अनुरूप होना चाहिए। मैंने सबसे कम रैंक के साथ जवाब उठाया। आप दोनों ने मदद की। – Skurmedel

+2

कोई चिंता नहीं। खुशी है कि आपने इसे समझ लिया :) – Tchami

4

नीचे दिए गए लिंक मुझे मदद की बहुत समझने के लिए और अधिक प्रभावी ढंग से मैट्रिक्स का उपयोग करें।आप उन्हें दिलचस्प लग सकते हैं:

http://stevehazen.wordpress.com/2010/02/15/matrix-basics-how-to-step-away-from-storing-an-orientation-as-3-angles/

मैं आप के रूप में अपेक्षाकृत एक ही बात कर रहा हूँ अभी :)

+0

धन्यवाद, यह बहुत व्यापक दिखता है। – Skurmedel

+0

यदि आप एक्सएनए में 3 डी आधारित कुछ और कर रहे हैं और जानकारी लिंक के साथ पंप करना चाहते हैं, तो बस पूछें। मैंने अधिक उन्नत सामग्री के लिए जानकारी की एक अच्छी अच्छी सूची शुरू करने और संकलित करने से पहले बहुत सारे शोध किए। – Remm

+0

हायया, रेम, मैं 3 डी आधारित एक्सएनए सामान कर रहा हूं, और मुझे जानकारी लिंक के साथ पंप करना अच्छा लगेगा! मेरे लिए कोई सुझाव मिला? –