2012-12-12 13 views
5

मैं दुनिया के अंतरिक्ष निर्देशांक को कैमरे निर्देशांक में परिवर्तित करने के तरीके पर उलझन में हूं। lookAtकैमरा स्पेस के लिए विश्व स्थान

यू = ऊपर (0,1,0) एक्स एन (सामान्यीकृत)

-

मेरे वर्तमान समझ है कि मैं कैमरे अंतरिक्ष वेक्टर गणना करने के लिए की आवश्यकता होगी जहां

एन = आई-पाइंट है

वी = एन एक्स यू

फिर एक बार मेरे पास < यू, वी, एन> क्या मैं बस प्रत्येक बिंदु को गुणा करता हूं?

उत्तर

3

चलें मान:

  • नेत्र स्थिति है = (e_x, e_y, e_z),
  • देखने दिशाडी = (d_x, d_y, d_z)
  • है
  • उप-वेक्टरयूपी = (up_x, up_y, up_z)

अब पहले एक orthonormal फ्रेम का निर्माण:

  • आर = DX यूपी
  • यू = RXD
  • अब सामान्य विकास, आर, यू और आप (डी कैमरे के लिए एक orthonormal फ्रेम है, आर, यू)

आदेश कैम-coord फ्रेम में वैश्विक coord फ्रेम को बदलने के लिए आप निम्नलिखित मैट्रिक्स M_R आवेदन कर सकते हैं में:

  • | आर_एक्स, आर_ई, आर_जे, 0 |
  • | यू_एक्स, यू_ई, यू_जे, 0 |
  • | -D_x, -D_y, -D_z, 0 |
  • | 0.0, 0.0, 0.0, 1।0 |

अपने कैमरे वैश्विक मूल पर तैनात नहीं है, तो आप भी एक अनुवाद M_T आवेदन करना होगा:

  • | 1, 0, 0, -ई_एक्स |
  • | 0, 1, 0, -e_y |
  • | 0, 0, 1, -e_z |
  • | 0, 0, 0, 1 |

अंत में वैश्विक से अपना पूरा परिवर्तन मैट्रिक्स कैम-coords के लिए है:

  • एम = M_R * M_T
  • | आर_एक्स, आर_ई, आर_जे, (आर डॉट-ई) |
  • | यू_एक्स, यू_ई, यू_ज़, (यू डॉट-ई) |
  • | -D_x, -D_y, -D_z, (डी डॉट ई) |
  • | 0.0, 0.0, 0.0, 1.0 |
+0

btw। आपके पोस्ट में उल्लिखित मैट्रिक्स आपके पोस्ट में (एम_आर)^- 1 = (एम_आर)^टी के अनुरूप है और कैम-कॉर्ड से लेकर ग्लोबल कॉर्ड तक उलटा परिवर्तन है। – Dirk

+0

बहुत बहुत धन्यवाद! मैं थोड़ी देर के लिए इस पर अटक गया हूं और आपकी व्याख्या बहुत स्पष्ट और पालन करने में आसान थी। +1 – Freddy

0

मुझे लगता है कि पिछले पोस्ट में कोई त्रुटि है

इस मैट्रिक्स

| R_x, R_y, R_z, (R dot -E) | 
| U_x, U_y, U_z, (U dot -E) | 
| -D_x, -D_y, D_z, (D dot E)| 
| 0.0, 0.0, 0.0, 1.0| 

चाहिए (मैं इसे OpenGL में परीक्षण, यह एक सही है)

| R_x, R_y, R_z, (R dot -E) | 
| U_x, U_y, U_z, (U dot -E) | 
| -D_x, -D_y, -D_z, (D dot E)| 
| 0.0, 0.0, 0.0, 1.0| 
+0

डी_ज़ में नकारात्मक इस बात पर निर्भर करता है कि सिस्टम दाएं या बाएं हाथ के नियम का उपयोग करता है या नहीं। ओपनजीएल सही हाथ प्रणाली का उपयोग करता है, यही कारण है कि आपको अपने मैट्रिक्स को संशोधित करना था (यानि नकारात्मक जेड पॉइंट्स को स्क्रीन में दाएं हाथ में स्क्रीन में) –

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