मैट्रिक्स क्या दर्शाता है?


19

मैंने हाल ही में ओपनजीएल सीखना शुरू किया और मैट्रिसेस क्या हैं और कंप्यूटर ग्राफिक्स में उनकी भूमिका क्या है, यह कल्पना करने में समस्या हो रही है। इस तरह 4x4 मैट्रिक्स के टेम्पलेट को देखते हुए:

यहाँ छवि विवरण दर्ज करें

मुझे लगता है कि इस तरह के प्रत्येक मैट्रिक्स विश्व अंतरिक्ष में एक शीर्ष के निर्देशांक हैं। और उनमें से कई एक साथ रखा और छायांकित एक वस्तु दे?

लेकिन ए Xx, ए Xyऔर ए क्यों है Xz? मैंने पढ़ा कि इसकी एक अलग धुरी (ऊपर, बाएँ, आगे) लेकिन अभी भी महत्व के शीर्ष या पूंछ नहीं बना सकते हैं।

जवाबों:


19

कंप्यूटर ग्राफिक्स में मैट्रिक्स मॉडल में प्रत्येक समन्वय के लिए दिए गए परिवर्तन हैं। प्रत्येक मैट्रिक्स एक समन्वय (3-स्थान में एक बिंदु) पर लागू करने के लिए कई परिवर्तनों का एक संयोजन है।

ट्रांसफ़ॉर्मेशन का निर्माण तीन ट्रांसफ़ॉर्म प्रकारों में से एक पर आधारित है: ट्रांसलेट, रोटेट और स्केल।

अनुवाद मैट्रिक्स कुछ इस प्रकार है:

एक अनुवाद मैट्रिक्स

और एक स्केल मैट्रिक्स: स्केल मैट्रिक्स

रोटेशन मैट्रिसेस जैसे दिखते हैं:

यहाँ छवि विवरण दर्ज करें

इनमें से किसी भी मैट्रिक्स को संयोजित करने के लिए आप उन्हें एक साथ गुणा करते हैं। एक शीर्ष पर रूपांतरण को केवल शीर्ष पर लागू करने के लिए (जैसा कि अनुवाद आरेख में देखा गया है)।


4
ओ तो मैट्रिस अंक का प्रतिनिधित्व नहीं करते हैं। Im ने अब अवतार लिया
Sad CRUD डेवलपर

बहुत बार वे एक वस्तु या व्यूपोर्ट पर एक पूरे के रूप में लागू होते हैं (यानी आप अपने ऑर्थो बनाम परिप्रेक्ष्य विचार कैसे प्राप्त करते हैं)
एलेक्स शेपर्ड

3
@ बल्डन: नहीं, लेकिन वे निश्चित रूप से अंक शामिल कर सकते हैं। उदाहरण के लिए, ModelView मैट्रिक्स (GL / column-major) में अंतिम कॉलम यह परिभाषित करता है कि मूल का अनुवाद कैसे किया जाता है। या इसे दूसरे तरीके से रखने के लिए, यह परिभाषित करता है कि आंख विश्व-अंतरिक्ष में कहाँ स्थित है और इसका शाब्दिक रूप से उपयोग किया जा सकता है।
एंडन एम। कोलमैन

आपका समन्वय एक 3-ट्यूपल है। मैट्रिक्स 3 बार 3 क्यों नहीं है? मान लीजिए कि एक ही मैट्रिक्स में तीन प्रकार के परिवर्तन को संयोजित करने में सक्षम होने के लिए और अभी भी पर्याप्त जगह है, तो फिर, नीचे-दाएं कोने क्या कर रहा है, ऐसा लगता है कि यह हमेशा 1 है?
n611x007

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

10

कंप्यूटर ग्राफिक्स में, हम ट्रांसफॉर्मेशन को एनकोड करने के लिए मेट्रिसेस का उपयोग करते हैं ।

मैट्रिक्स जिसमें केवल अनुवाद, रोटेशन या स्केलिंग ट्रांसफ़ॉर्म होते हैं, उनकी आमतौर पर शोषण की व्याख्या होती है: मैट्रिक्स के ऊपरी-बाएँ 3x3 में केवल रोटेशन या स्केल डेटा होता है, नीचे पंक्ति या दाएं कॉलम में ट्रांसलेशन डेटा होता है। यह एक सामान्यता नहीं है, लेकिन कंप्यूटर ग्राफिक्स में दर्शाए गए परिवर्तनों के सबसेट के लिए अक्सर सही होता है जो लोग इसका उपयोग करते हैं।

इसी तरह, मैट्रिक्स के मूल्यों और संबंधित समन्वय फ्रेम के बीच एक संबंध है, मैट्रिक्स का प्रतिनिधित्व करता है (जो हमेशा "विश्व स्थान नहीं है," मुझे ध्यान देना चाहिए)। ऊपरी-बाएँ 3x3 कॉलम (या पंक्तियाँ) समन्वय फ़्रेम के X, Y और Z अक्षों का प्रतिनिधित्व करते हैं।

पंक्तियाँ कुल्हाड़ियों का प्रतिनिधित्व करती हैं या नहीं या कॉलम क्या इस बात पर निर्भर करता है कि आप किस प्रकार के गुणन का उपयोग कर रहे हैं row vector * matrixया matrix * column vector। मैट्रिक्स गुणा करते समय, दो मैट्रिस के आंतरिक आयामों को सहमत होना चाहिए, और इसलिए चाहे आप वैक्टर का प्रतिनिधित्व पंक्ति मैट्रिस या कॉलम मैट्रिसेस के रूप में कर रहे हों, यह पसंद (ओपनजीएल और पारंपरिक गणित कॉलम वैक्टर को पसंद करते हैं) को प्रभावित करता है।

मैं रैखिक बीजगणित पर एक अच्छी पुस्तक प्राप्त करने की सलाह देता हूं, या कम से कम मैट्रिक्स और क्वाटर्नियन एफएक्यू पर एक नज़र डाल रहा हूं और यह पोस्ट डायरेक्टएक्स और ओपनजीएल में मैट्रिक्स लेआउट पर है ।


रैखिक बीजगणित पर "अच्छी" पुस्तकों के टन हैं, जिनमें से कुछ मैंने पढ़ा और समझा भी है। बात यह है कि यह थोड़ा मदद नहीं करता है, ऐसा नहीं है कि मेरे पास न तो है कि मैं इसे समझ गया हूं। मुझे लगता है कि आपकी आखिरी सलाह गलत धारणा का जवाब दे रही है।
n611x007

9

मैट्रिक्स क्या है?

mकॉलम और nपंक्तियों के साथ एक मैट्रिक्स एक फ़ंक्शन का प्रतिनिधित्व करता है जो तत्वों के साथ एक वेक्टर *m (या निर्देशांक) का उपभोग करता है और nतत्वों के साथ एक वेक्टर का उत्पादन करता है ।

इससे आप यह देख सकते हैं कि अगर और केवल अगर एक मैट्रिक्स वर्ग है, तो क्या वेक्टर की आयामीता नहीं बदलेगी। उदाहरण के लिए। आप एक 3D वेक्टर को 3D वेक्टर में परिवर्तित करने से एक 3D वेक्टर प्राप्त करते हैं, एक 2D से 2D इत्यादि।

* : भौतिक विज्ञान में, वैक्टर आमतौर पर बलों या अन्य "प्रभावों" को इंगित करने के लिए उपयोग किया जाता है जो वेग या त्वरण जैसी चीजों के "चारों ओर" चलते हैं। लेकिन एक बिंदु या संख्या के किसी भी मनमाने सरणी का प्रतिनिधित्व करने के लिए एक वेक्टर का उपयोग करने से आपको कुछ भी नहीं रोक रहा है (कुछ पुस्तकालय और प्रोग्रामिंग भाषाएं "1 डी सरणी" का अर्थ करने के लिए "वेक्टर" का भी उपयोग करती हैं)। मैट्रिसेस के साथ उपयोग के लिए, कुछ भी आपके वेक्टर (यहां तक ​​कि तार या रंग) के तत्व हो सकते हैं, इसलिए जब तक आपके मैट्रिक्स के तत्व जो भी हों, उन्हें जोड़ने, घटाने और गुणा करने का एक तरीका है। इसलिए नाम वेक्टर , जिसका अर्थ है "वाहक" - यह आपके लिए मूल्य रखता है या रखता है

मैट्रिक्स द्वारा गुणा करने का क्या मतलब है?

तो अगर एक मैट्रिक्स एक फ़ंक्शन है, तो किस प्रकार का फ़ंक्शन है ? कार्य क्या करता है? इसके लिए नुस्खा मैट्रिक्स के तत्वों द्वारा परिभाषित किया गया है। आइए कॉल इनपुट u, आउटपुट v, मैट्रिक्स M(गुणा M*u=vतो रूप में ही है f(u)=v) और u(i)देता है iकी वें तत्व u(2 तत्व, वाई समन्वय है उदाहरण के लिए)। मैट्रिक्स के लिए, M(i,j)पंक्ति i, स्तंभ का मतलब है j

तत्व का निर्माण v(1), परिणाम में पहला, मैट्रिक्स की पहली पंक्ति द्वारा वर्णित है। u(1)समय M(1,1), प्लस u(2)समय M(1,2), ... प्लस u(i)समय M(1,i)। एक मैट्रिक्स एक बहुत ही सरल प्रोग्रामिंग भाषा की तरह है, यह केवल उन प्रोग्रामिंग कार्यों के लिए अच्छा है जो इनपुट के आसपास फेरबदल करके, उन्हें खुद से जोड़कर काम करते हैं, आदि **

यह कल्पना करना सहायक है कि आप एक समय में आउटपुट के एक तत्व पर काम कर रहे हैं, इसलिए, आप एक समय में मैट्रिक्स की केवल एक पंक्ति का उपयोग कर रहे हैं। आप uक्षैतिज रूप से लिखते हैं । आप Mइसके नीचे ith पंक्ति लिखें । आप हर ऊपर / नीचे जोड़ी को गुणा करते हैं और नीचे दिए गए उत्पादों को लिखते हैं, फिर उत्पादों को जोड़ते हैं। के हर तत्व को प्राप्त करने के लिए हर पंक्ति के लिए दोहराएँ v। (अब आप देखते हैं कि क्यों मैट्रिक्स mद्वारा nएक mवेक्टर पर काम करना चाहिए और एक वेक्टर का उत्पादन करना चाहिए n।)

इसके बारे में सोचने का एक और तरीका है - मान लें कि हम 3 डी से 3 डी ट्रांसफ़ॉर्म कर रहे हैं, इसलिए 3x3 मैट्रिक्स (या 3 डी ट्रांसफ़ॉर्म क्योंकि उन्हें अक्सर कहा जाता है क्योंकि आप इस "फंक्शन" का दिखावा कर सकते हैं "3 डी पॉइंट" चल रहा है, भले ही यह वास्तव में है बस संख्या बदल रहा है)। मान लीजिए कि पहली पंक्ति है [1 2 0]। इसका मतलब है, परिणाम का x प्राप्त करने के लिए, इनपुट का x, इनपुट के y का 2, और इनपुट के z का 0 प्राप्त करें। तो यह वास्तव में एक नुस्खा है।

** : यदि एक मैट्रिक्स एक प्रोग्रामिंग भाषा है, तो यह ट्यूरिंग पूरा भी नहीं है।

दो मैट्रिक्स का गुणा करने का क्या मतलब है?

वे उपयुक्त आकार के दोनों मैट्रिक्स हैं, तो A*B"पहले लागू होता है जो एक समारोह का मतलब है Bतो A"। आप देख सकते हैं कि गुणन के लिए आकारों पर अवरोध क्यों मौजूद हैं, क्योंकि आकार इनपुट और आउटपुट आकार को निर्धारित करता है, और एक मैट्रिक्स दूसरे के आउटपुट का उपभोग करता है। गुणन का अर्थ संयोजन कार्यों से क्यों है? यह नोटिस करना आसान है कि यह होना चाहिए। यदि A*uजैसा है f(u)और B*uजैसा है, वैसा ही है g(u)तो f(g(u))जैसा f(B*u)है, वैसा ही है A*(B*u)

इसी तरह, एक ही फ़ंक्शन के बार-बार किए गए एप्लिकेशन को शक्तियों के रूप में दिखाया जा सकता है, क्योंकि A*A*Aइसका मतलब है कि Aतीन बार प्रतिनिधित्व करने वाले फ़ंक्शन को लागू करना ।

मैट्रीस कैसे उपयोगी हैं?

क्या अच्छा बदलाव कर रहा है जैसे new_x = 1*x+2*y+0*z(यदि पहली पंक्ति [1 2 0] है)? यह बहुत स्पष्ट नहीं है, लेकिन यह समझाने के लिए एक और 2D मैट्रिक्स लें। मैट्रिक्स है:

[ 0 1
  1 0 ]

या [0 1; 1 0]सुविधाजनक मतलूब संकेतन का उपयोग करना। यह मैट्रिक्स क्या करता है? यह एक 2D वेक्टर को इस तरह से रूपांतरित करता है: परिणाम के x के लिए, इनपुट के y का 1 लें। परिणाम के y के लिए, इनपुट के x का 1 लें। हमने केवल इनपुट के x और y निर्देशांक की अदला-बदली की है - यह मैट्रिक्स x = y लाइन के बारे में बिंदुओं को दर्शाता है । यह उपयोगी है! विस्तार से, आप देखेंगे कि SW - NE लाइन के साथ 1s वाले सभी मैट्रिसेस । आप यह भी देख सकते हैं कि पहचान मेट्रिक्स आपको इनपुट वापस क्यों देते हैं (आउटपुट के x के लिए, इनपुट का x लें, आउटपुट के y के लिए, इनपुट के y से लें ...)।

अब आप देखते हैं कि प्रतीक क्यों हैं। Xx, Yx- वे इनपुट का कितना मतलब X, Yआदि उत्पादन में चला जाता है x

मैट्रिसेस कैसे उपयोगी हैं?

आप और क्या परिवर्तन कर सकते हैं? आप एक पहचान मैट्रिक्स लेकर आकार बदल सकते हैं, लेकिन विकर्ण के साथ एक अलग संख्या के साथ। उदाहरण के लिए, [2.5 0; 0 22.5]इनपुट के प्रत्येक निर्देशांक को 2.5 से गुणा करेंगे, और यदि आप इस मैट्रिक्स को हर बिंदु पर एक चित्र में लागू करते हैं, तो चित्र 2.5 बड़ा होगा। यदि आप केवल एक पंक्ति ( [2.5 0; 0 1]) में 2.5 डालते हैं तो केवल x निर्देशांक को गुणा किया जाएगा, इसलिए आप केवल x के साथ खिंचाव करेंगे।

अन्य मैट्रिसेस अन्य परिवर्तन दे सकते हैं, जैसे "स्केविंग", जिनकी उपयोगिता की डिग्री बदलती है। व्यक्तिगत रूप से, तिरछा मेरा सबसे कम पसंदीदा है क्योंकि मैट्रिक्स इतना सरल दिखता है, लेकिन खुद को बदलने से शायद ही कभी कुछ होता है सिवाय एक तस्वीर के। एक उपयोगी "रोटेशन" है - आप एक बिंदु को कैसे घुमाते हैं? उत्पत्ति के बारे में डिग्री वामावर्त (x, y)द्वारा घूमने के बाद बिंदु की स्थिति को काम करने की कोशिश करें theta। आप पाएंगे कि नए x और y दोनों निर्देशांक पुराने और x और y को कुछ थीटा के कोसाइन से गुणा करने से निकलते हैं। आप आसानी से साइन और कोसाइन का उपयोग करके एक रोटेशन मैट्रिक्स लिख सकते हैं जो इस फ़ंक्शन से मेल खाती है।

गैर-वर्ग मैट्रिसेस के साथ, आप एक इनपुट की गतिशीलता को भी बदल सकते हैं। 2 डी इनपुट को 3 डी में बदलना बहुत उपयोगी नहीं है, क्योंकि नए समन्वय में डालने के लिए कुछ "निर्माण" करना मुश्किल है, लेकिन 3 डी में 2 डी बहुत उपयोगी है। अन्य बातों के अलावा, यह है कि आपका कंप्यूटर *** पर 3 डी दृश्य को आपके मॉनिटर पर खींचने के लिए 3 डी दृश्य को प्रोजेक्ट करना जानता है ।

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

*** : जब आप प्रोजेक्ट करते हैं , तो आप मूर्तिकला की तरह एक 3 डी ऑब्जेक्ट लेते हैं, उस पर एक प्रकाश चमकते हैं, और देखते हैं कि एक दीवार पर किस तरह की 2 डी छाया गिरती है।

मैट्रिसेस की सीमाएँ क्या हैं?

क्या आप मैट्रिसेस के साथ हर फंक्शन कर सकते हैं? नहीं। ग्राफिक रूप से सोचें, तो यह कल्पना करना कठिन है कि मैट्रिक्स क्या नहीं कर सकता (लेकिन यह मौजूद है: उदाहरण के लिए "ज़ुल्फ़" प्रभाव नहीं किया जा सकता है)। हालांकि, यहां एक आसान उदाहरण है: मान लें कि फ़ंक्शन fऐसा है f(u)जो आपको u हर तत्व के साथ वापस देता है । आप देखेंगे कि आप इसके लिए एक मैट्रिक्स नहीं लिख सकते हैं: मैट्रिस के साथ व्यंजनों का वर्णन करने के लिए केवल एक सुविधा है जो एक निरंतर संख्या से गुणा करती है, शक्ति जैसे अन्य फैंसी कार्यों को व्यक्त नहीं किया जा सकता है।

**** : यह भी है कि इसे रैखिक बीजगणित क्यों कहा जाता है - शक्ति फ़ंक्शन गैर-रैखिक है , यह प्लॉट किए जाने पर एक सीधी रेखा नहीं बनाता है।

4D मैट्रिसेस में अजीब अतिरिक्त पंक्ति पर

अब, क्यों मैट्रिक्स आपके उदाहरण 4 से 4 में है? क्या इसका मतलब 4-आयामी स्थान नहीं है? हमारे पास 4 डी कंप्यूटर नहीं हैं, तो क्यों? यह वास्तव में मैट्रिस के साथ एक दिलचस्प चाल है जो रैखिक संचालन के बारे में पिछले बिंदु से संबंधित है।

मैट्रिस के साथ कौन से फ़ंक्शंस नहीं किए जा सकते हैं: 2 डी प्वाइंट को दाईं ओर ले जाने के लिए मैट्रिक्स क्या है (जो बिंदु का उत्पादन करता है (x+2, y)? फिर से, हम अटक जाते हैं। इनपुट को गुणा करने का एक तरीका है, लेकिन जोड़ने का कोई तरीका नहीं है। एक निरंतरता। 2 डी काम के लिए, चाल यह दिखावा है कि आप वास्तव में 2 डी अंतरिक्ष में नहीं हैं, लेकिन 3 डी अंतरिक्ष में, हर चीज की ऊंचाई (z समन्वय या तीसरा तत्व) को छोड़कर हमेशा 1 होता है (यह थोड़ा सा है कि 2 डी ब्रह्मांड कैसा है बस एक 3 डी ब्रह्मांड के फर्श के साथ एक "प्लेट" झूठ बोल रही है - उस मामले में तीसरा समन्वय हमेशा 0 होता है।) फिर आप इस जादू को एक निरंतर के रूप में अंतिम समन्वय का उपयोग कर सकते हैं, क्योंकि आप जानते हैं कि यह हर इनपुट के लिए हमेशा 1 है।

इसी तरह, 3 डी अंकों को स्थानांतरित करने के लिए, आपको 4 डी निर्देशांक की आवश्यकता होती है। यही कारण है कि आपके द्वारा देखे जाने वाले सभी 3D ट्रांसफॉर्मेशन मैट्रीस [0 0 0 1]में अंतिम पंक्ति के रूप में होगा - आपको कभी भी 4 के आयाम को नहीं बदलना चाहिए, या परिणाम 3D में प्रतिनिधित्व करने के लिए बहुत जटिल होगा!


तो आप इसके अलावा एक मैट्रिक्स कैसे करते हैं? एक पंक्ति है Xx Yx Zx Tx... और अंतिम पंक्ति वास्तव 0t 0t 0t 1tमें से प्रतिस्थापित की गई है Xt Yt Zt Tt। आप (x+2, y)से बनाने के लिए (x, y)जा सकता है 1x 0y 0z 2tकि आप सही के 1*x + 0*y + 0*z + 2*1बाद से दे देंगे t=1? जो x + 2 के लिए बहुत अधिक मात्रा में है। ओह प्रिय अब आप मज़ेदार टी मूल्यों के साथ अपने प्रतिपादन को गड़बड़ कर सकते हैं, क्या आप नहीं कर सकते? -grin- (लंबे समय तक पढ़ा, अभी भी सबसे अच्छा मूल्य, thx)
n611x007

2

यह एक 4x4 कॉलम-प्रमुख मैट्रिक्स है, और इसके लुक से, एक मैट्रिक्स मैट्रिक्स।

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

वे सभी एक ही समन्वय स्थान के लिए समानार्थक शब्द हैं। दुर्भाग्य से आपको कंप्यूटर ग्राफिक्स के साथ काम करते समय सभी समानार्थी शब्दों को सीखना होगा क्योंकि विभिन्न पुस्तकें और लोग उन्हें अलग-अलग नामों से बुलाएंगे। अधिकांश समन्वय रिक्त स्थान के कई नाम हैं।

वैसे, आपके दृश्य मैट्रिक्स में तीन कॉलम आम तौर पर ऑर्थोगोनल होते हैं, यानी वे एक दूसरे के लिए समकोण बनाते हैं। यह आवश्यक नहीं है, लेकिन पारंपरिक कैमरा का निर्माण करते समय यह एक बहुत ही सामान्य संपत्ति है।


1

TL; DR संस्करण:

[x y z]प्रत्येक पंक्ति में पहले तीन तत्व एक तब्दील कोऑर्डिनेट सिस्टम के एकल आधार वेक्टर का प्रतिनिधित्व करते हैं । अंतिम तत्व wएक अनुवाद घटक है।

लंबे संस्करण

यदि आप एक मैट्रिक्स चाहते थे, जब एक शीर्ष पर लागू किया जाता है, तो 45 डिग्री से मूल के बारे में शब्द को घुमाएगी, आप मैट्रिक्स को बदल अक्षों का प्रतिनिधित्व करने वाले तीन वैक्टर के साथ भरेंगे:

  • अक्ष iपर एक बिंदु , लेकिन 45 डिग्री घुमाया गया। यह केवल है , जहां और एक त्रिकोण एक्स अक्ष के लिए एक 45 डिग्री के कोण आंतरिक रिश्तेदार के साथ के पैरों कर रहे हैं: ।x[1 0 0][i_x i_y i_z]i_xi_y[cos(45) sin(45) 0]
  • jY अक्ष पर एक बिंदु [0 1 0], लेकिन उस अक्ष से 45 डिग्री घुमाया गया। इसे कागज के एक टुकड़े पर स्केच करें और आप देखेंगे कि काउंटर-क्लॉकवाइज को घुमाते समय, घटक बन जाते हैं [-sin(45) cos(45) 0]
  • अक्ष kपर एक बिंदु z। इस उदाहरण में, zअप्रभावित है क्योंकि हम (स्क्रीन-संरेखित) xy विमान में घूम रहे हैं

तो, हमारे पास तीन नए वैक्टर हैं: i, j, k। यह कल्पना करने का आसान तरीका सिर्फ एक्स और वाई कुल्हाड़ियों को ले जा रहा है और पूरी क्रॉस व्यवस्था को घुमा रहा है।

हम इन्हें एक मैट्रिक्स में कैसे डालते हैं?

i_x i_y i_z
j_x j_y j_z
k_x k_y k_z

या

 cos(45)  sin(45)    0
-sin(45)  cos(45)    0
    0        0       1

यदि आप उस मैट्रिक्स द्वारा किसी भी शीर्ष को गुणा करते हैं, तो आपको मिलेगा

v1_x = v_x cos(Θ)     - v_y sin(Θ) + v_z * 0
V1_y = v_x*sin(Θ)    + v_y cos(Θ) + v_Z * 0
V1_z = v_x * 0        + v_y * 0    + v_z * 1

के लिए v = [1 0 0], और Θ = 90°, यह बन जाता हैv1 = [0 1 0]

अनुवाद के लिए, हम एक चौथी पंक्ति और कॉलम जोड़ते हैं, और अनुवाद घटकों को अंतिम कॉलम में रखते हैं। हम शीर्ष पर एक चौथा घटक जोड़ते हैं wजो आमतौर पर होता है1 । ऐसा तब होता है, जब हम मैट्रिक्स द्वारा वर्टेक्स को गुणा करते हैं, डब्ल्यू घटक इनपुट कॉलम में अंतिम कॉलम को जोड़ देता है, इसलिए वर्टेक्स को स्थानांतरित या अनुवादित किया जाता है। हम इन "सजातीय निर्देशांक" कहते हैं। (हमारे उद्देश्यों के लिए, "सजातीय" का अर्थ है कि wप्रत्येक वेक्टर में एक 4 वा घटक होता है, और हम 3x3 के बजाय 4x4 मैट्रिक्स का उपयोग करते हैं। अक्सर आप ऐसे शेड्स देखेंगे जो 4x3 मैट्रिसेस का उपयोग करते हैं, जो अधिकतर-यूज़ 4 जी पंक्ति भेजने से बचने के लिए करते हैं। जीपीयू, जो मूल्यवान मेमोरी और बैंडविड्थ का उपभोग करता है। परिप्रेक्ष्य प्रक्षेपण के लिए 4 वीं पंक्ति की आवश्यकता है, लेकिन बहुत कुछ नहीं।)

उम्मीद है की यह मदद करेगा।


2
वह क्षण जब आपको एहसास होता है कि आपने तीन साल पहले से पहले से ही पूछे गए प्रश्न का उत्तर दे दिया है ...
डी

: P हमेशा उत्तर देने से पहले प्रश्न दिनांक को देखें ...
HolyBlackCat
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.