2012-05-30 18 views
12

Let MATLAB के 4x4 दृश्य मैट्रिक्स, द्वारा दृश्य समारोह से प्राप्त हो A:मैटलैब 3 डी दृश्य मैट्रिक्स

A = view; 

A(1:3,1:3) रोटेशन और स्केलिंग के अनुरूप होना चाहिए,
A(1:3,4) अनुवाद के अनुरूप होना चाहिए, और
A(4,:) चाहिए बस [0 0 0 1] हो।

जब निम्नलिखित सरल परिदृश्य के लिए कैमरा मानकों की स्थापना:

-1 0 0 0.5 
0 1 0 -0.5 
0 0 1 -0.5 
0 0 0 1 

अब मैं हमारे जहां 0.5 के से आ रहे हैं समझ नहीं सकता:

मुझे लगता है कि A = view है मिल । ध्यान दें कि मैंने कैमरा स्थिति को [0,0,0] पर सेट किया है, इसलिए कोई अनुवाद नहीं होना चाहिए।

एक और खास, द्वारा करने के लिए [0,0,10] कैमरे की स्थिति की स्थापना: एक में

set(gca, 'CameraPosition', [0,0,10]) 

परिणाम: = दृश्य मैट्रिक्स बनने

1 0 0 -0.5 
0 1 0 -0.5 
0 0 -1 5.5 
0 0 0 1 

तो मैंने देखा है -0.5 A(3,4) में 5.5 हो गया है और इसे किसी भी तरह से 5 = 10/2.
के साथ करना है, यह है कि कैमरे की स्थिति को बदलकर [0,0, ए] A(3,4) पर व्यू मैट्रिक्स को लगभग a/2 पर बदलता है।

यह ... अजीब है? अजीब? अजीब?

अद्यतन: फिर भी एक और pecularity यह है कि ए (1: 3,1: 3) का निर्धारक -1 है हालांकि एक घूर्णन मैट्रिक्स के लिए यह होना चाहिए 1. जब यह -1 होना चाहिए इसका मतलब है कि यह न केवल घूर्णन है, प्रतिबिंब भी। हमें प्रतिबिंब की आवश्यकता क्यों होगी?

+0

में तय किया गया है, मुझे भी वही परिणाम मिल रहे हैं, अजीब वास्तव में ... इसके लायक होने के लिए, यह [थ्रेड] देखें (http://www.mathworks.com/matlabcentral/answers/15887-how-to-render-an-accurate-image-of-a-3d-model) जो 3 डी व्यू और 2 डी से संबंधित कुछ अनियंत्रित अक्ष गुणों का उल्लेख करता है प्रक्षेपण – Amro

उत्तर

0

मेरा शिक्षित अनुमान यह है कि मैटलैब आपको इसे सेट करने देता है जैसे कि पिक्सेल निर्देशांक (-0.5 * व्यूपोर्ट आकार, 0.5 * व्यूपोर्ट आकार) की सीमा में हैं, लेकिन आंतरिक रूप से अधिक सामान्य पिक्सेल निर्देशांक सिस्टम का उपयोग करता है जिसमें प्रत्येक पिक्सेल का समन्वय (0, व्यूपोर्ट आकार) की सीमा में है।

0

matlab से परिचित नहीं है, लेकिन: 3 डी ग्राफिक्स में आप हमेशा प्रक्षेपण और कैमरा matrices के बीच अंतर करते हैं।

प्रोजेक्शन "कैमरा स्पेस" से जाता है जहां कैमरा शून्य पर प्रोजेक्टिव स्पेस होता है। प्रोजेक्टिव मैट्रिक्स लागू होने के बाद स्क्रीन निर्देशांक को x '= x/w आदि के रूप में गणना की जाती है। इसलिए परिप्रेक्ष्य के तहत सभी प्रोजेक्टिव मैट्रिक्स जेड को डब्ल्यू में ले जाना है। ऑर्थोग्राफिक में इसके बजाय ज़ेड x जोड़ सकता है।

लेकिन इसमें अक्सर विंडो ट्रांसफॉर्म भी शामिल होते हैं। कैमरा स्पेस में, कैमरा 0 पर है और ज़ेड को देख रहा है, इसलिए निर्देशांक अधिक -1.1 हैं। लेकिन खिड़की निर्देशांक 0..1 हैं, इस प्रकार अक्सर * .5, +.5 या नकारात्मक आदि

आपके द्वारा देखी जाने वाली अजीबता कैमरा और प्रक्षेपण को मिलाकर है। मुझे यकीन है कि matlab दोनों है। कैमरे को स्थानांतरित करने और घुमाने के लिए कैमरा मैट्रिक्स का उपयोग करें। केवल खिड़की निर्देशांक और परिप्रेक्ष्य प्रभाव के लिए प्रक्षेपण का प्रयोग करें।

1

Matlab 2013a में इसे आज़माएं .. आपको अपेक्षाओं से मेल खाने वाले परिणाम मिलेंगे ...मुझे नहीं पता कि आप किस मैटलैब का उपयोग कर रहे हैं .. लेकिन यह निश्चित रूप से संस्करण 8.1