2010-03-17 15 views
17

मैं 3 डी प्रतिपादन के बारे में जानना शुरू कर रहा हूं और मैं अच्छी प्रगति कर रहा हूं। मैंने matrices और सामान्य संचालन के बारे में बहुत कुछ उठाया है जो उन पर किया जा सकता है।ओपनजीएल मैट्रिस को समझना

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

x y z n 
------- 
1 0 0 0 
0 1 0 0 
0 0 1 0 
0 0 0 1 

तो मेरी सबसे अच्छी समझ, कि यह एक सामान्यीकृत (कोई परिमाण) है 4 आयामी, स्तंभ-प्रमुख मैट्रिक्स। साथ ही यह विशेष रूप से इस मैट्रिक्स को "पहचान मैट्रिक्स" कहा जाता है।

कुछ सवाल:

  • "वें" आयाम क्या है?
  • इन्हें कब और कब लागू किया जाता है?

ओपनजीएल इस तरह के डेटा का उपयोग कैसे करता है, इस से मेरा सबसे बड़ा भ्रम उत्पन्न होता है।

+0

"खेल और इंटरैक्टिव अनुप्रयोगों के लिए आवश्यक गणित" पुस्तक देखें । –

+2

एक सामान्यीकृत वेक्टर "कोई परिमाण नहीं" है। सामान्यीकृत वैक्टरों की लंबाई/परिमाण 1. – alesplin

+0

धन्यवाद है! मुझे लगता है कि मुझे समझ में ले जाया गया। कम से कम मैं सही रास्ते पर था। ;) –

उत्तर

3

संक्षिप्त उत्तर जो आपको प्रारंभ करने में मदद कर सकता है वह यह है कि 'nth' आयाम, जैसा कि आप इसे कहते हैं, किसी भी दृश्यमान मात्रा का प्रतिनिधित्व नहीं करता है। यह मैट्रिक्स गुणाओं को सक्षम करने के लिए एक व्यावहारिक उपकरण के रूप में जोड़ा जाता है जो अनुवाद और परिप्रेक्ष्य प्रक्षेपण का कारण बनता है। एक सहज 3x3 मैट्रिक्स उन चीजों को नहीं कर सकता है।

अंतरिक्ष में एक बिंदु का प्रतिनिधित्व करने वाला एक 3 डी मान हमेशा इस चाल को काम करने के लिए चौथे मूल्य के रूप में जोड़ा जाता है। एक दिशा का प्रतिनिधित्व करने वाला एक 3 डी मान (यानी सामान्य, यदि आप उस शब्द से परिचित हैं) को चौथे स्थान पर 0 जोड़ा जाता है।

59

अधिकांश 3 डी ग्राफिक्स में एक बिंदु को 4-घटक वेक्टर (एक्स, वाई, जेड, डब्ल्यू) द्वारा दर्शाया जाता है, जहां w = 1. किसी बिंदु पर लागू सामान्य संचालन में अनुवाद, स्केलिंग, रोटेशन, प्रतिबिंब, स्कूइंग और इनके संयोजन

इन परिवर्तनों को "मैट्रिक्स" नामक गणितीय वस्तु द्वारा दर्शाया जा सकता है। एक मैट्रिक्स इस तरह एक वेक्टर पर लागू होता है:

[ a b c tx ] [ x ] [ a*x + b*y + c*z + tx*w ] 
| d e f ty | | y | = | d*x + e*y + f*z + ty*w | 
| g h i tz | | z | | g*x + h*y + i*z + tz*w | 
[ p q r s ] [ w ] [ p*x + q*y + r*z + s*w ] 

उदाहरण के लिए, स्केलिंग के रूप में

[ 1 . . dx ] [ x ] [ x + dx ] 
| . 1 . dy | | y | = | y + dy | 
| . . 1 dz | | z | | z + dz | 
[ . . . 1 ] [ 1 ] [ 1 ] 

4 घटक के लिए कारण में से एक के रूप में

[ 2 . . . ] [ x ] [ 2x ] 
| . 2 . . | | y | = | 2y | 
| . . 2 . | | z | | 2z | 
[ . . . 1 ] [ 1 ] [ 1 ] 

और अनुवाद प्रस्तुत किया जाता है एक मैट्रिक्स द्वारा एक अनुवाद प्रस्तुत करने के लिए है।

मैट्रिक्स का उपयोग करने का लाभ यह है कि एकाधिक परिवर्तनों को मैट्रिक्स गुणा के माध्यम से एक में जोड़ा जा सकता है।

अब, यदि उद्देश्य केवल टेबल पर अनुवाद लाने के लिए है, तो मैं (x, y, z, w) के बजाय (x, y, z, 1) कहूंगा और अंतिम पंक्ति बनाउंगा मैट्रिक्स हमेशा [0 0 0 1], जैसा आमतौर पर 2 डी ग्राफिक्स के लिए किया जाता है। वास्तव में, 4-घटक वेक्टर इस सूत्र के माध्यम से सामान्य 3-वेक्टर के लिए वापस मैप किया जाएगा:

[ x(3D) ] [ x/w ] 
| y(3D) ] = | y/w | 
[ z(3D) ] [ z/w ] 

यह homogeneous coordinates कहा जाता है। यह अनुमति देने से परिप्रेक्ष्य प्रक्षेपण भी एक मैट्रिक्स के साथ व्यक्त किया जाता है, जो फिर से अन्य सभी परिवर्तनों के साथ मिल सकता है।

उदाहरण के लिए, के बाद से दूर वस्तुओं स्क्रीन पर छोटा होना चाहिए, हम बदलने 3 डी सूत्र

x(2D) = x(3D)/(10 * z(3D)) 
y(2D) = y(3D)/(10 * z(3D)) 

का उपयोग कर अब 2 डी में निर्देशांक अगर हम प्रक्षेपण मैट्रिक्स

[ 1 . . . ] [ x ] [ x ] 
| . 1 . . | | y | = | y | 
| . . 1 . | | z | | z | 
[ . . 10 . ] [ 1 ] [ 10*z ] 

असली लागू तो 3 डी निर्देशांक बन जाएगा

x(3D) := x/w = x/10z 
y(3D) := y/w = y/10z 
z(3D) := z/w = 0.1 

तो हम सिर्फ जेड काट करने की जरूरत है परियोजना के लिए 2 डी करने के लिए बाहर निकलना।

+2

मेरी इच्छा है कि मैं आपके उदाहरणों को समझ सकूं, लेकिन मुझे वास्तव में यह नहीं मिल रहा है। मैं क्षमाप्रार्थी हूं। –

+1

@ ओमेगा ओपनजीएल रेड बुक का यह अनुभाग http://www.glprogramming.com/red/appendixf.html#name1 – Swiss

+0

@ ओमेगा शायद मूलभूत उपयोगी भी हो सकता है [http://en.wikipedia.org/wiki/Matrix_multiplication]। – Luca

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