मुझे अपनी ऑब्जेक्ट्स को विश्व समन्वय में समन्वयित करने के लिए एक आसान तरीका चाहिए, ताकि कोई उन्हें उस समन्वय प्रणाली में ढूंढ सके और टकराव का पता लगा सके?स्थानीय ऑब्जेक्ट निर्देशांक को विश्व निर्देशांक में कैसे परिवर्तित करें?
उत्तर
सबसे पहले, कुछ पृष्ठभूमि। 3 डी ग्राफिक्स में, आप कई वेक्टर रिक्त स्थान के बारे में चिंता करने की जरूरत:
- मॉडल अंतरिक्ष - इन आमतौर पर निर्देशांक हैं आप ओपन
- विश्व अंतरिक्ष करने के लिए निर्दिष्ट - निर्देशांक दुनिया में कुछ केंद्रीय बिंदु के संबंध में निर्दिष्ट कर रहे हैं।
- देखें स्थान - निर्देशांक को कैमरे के संबंध में निर्दिष्ट किया गया है
- प्रोजेक्शन स्पेस - स्क्रीन पर सबकुछ प्रत्येक आयाम में
[-1, +1]
अंतराल में फिट बैठता है।
निर्देशांक एक ही ढंग से निर्दिष्ट कर रहे हैं, इसलिए प्रत्येक सदिश घटकों (x, y, z, w)
, जहां w
एक स्केलिंग कारक है। आप 3-स्पेस में (x/w, y/w, z/w)
के रूप में निर्देशांक प्राप्त कर सकते हैं। परिप्रेक्ष्य प्रक्षेपण जैसे कुछ परिवर्तनों के लिए स्केलिंग कारक की आवश्यकता होती है जो गैर-समरूप समन्वय के साथ संभव नहीं होगा।
4x4 matrices को एक वेक्टर स्पेस से दूसरे में निर्देशांक बदलने के लिए आवश्यक है। आप तीन विभिन्न मैट्रिक्स हो सकता है:
- मॉडल मैट्रिक्स (दुनिया के लिए मॉडल)
- देखें मैट्रिक्स (दुनिया को देखने के लिए)
- प्रोजेक्शन मैट्रिक्स (प्रक्षेपण अंतरिक्ष के लिए दृश्य)
आप परियोजना होगा
C' = P * V * M * C
ओपन प्रशिक्षु: एक सूत्र का उपयोग कर स्क्रीन पर समन्वय C
सहयोगी दो matrices रखता है: modelview (मॉडल और एक साथ गुणा देखें), और प्रक्षेपण। एक बनावट मैट्रिक्स भी है जिसके बारे में हम चिंता नहीं करेंगे। जब आप glMatrixMode
पर कॉल करते हैं, तो आप इन मैट्रिक्स के बीच स्विच कर रहे हैं। आप glLoadIdentity
का उपयोग कर पहचान मैट्रिक्स के साथ वर्तमान मैट्रिक्स को प्रतिस्थापित करते हैं। आप glTranslatef
, glRotatef
, या gluProjection
जैसे कार्यों के साथ वर्तमान मैट्रिक्स में परिवर्तन लागू करते हैं। इनमें से प्रत्येक कार्य केवल 4x4 मैट्रिक्स बनाता है जो विशिष्ट परिवर्तन को लागू करता है, उसके बाद वर्तमान मैट्रिक्स को गुणा करता है। आप देख सकते हैं कि रूपांतरण मैट्रिस OpenGL 2.1 reference pages में क्या हैं।
अब वास्तविक उत्तर के लिए। आपको अपने दृश्य में प्रत्येक ऑब्जेक्ट के लिए 4x4 मॉडल मैट्रिक्स को बनाए रखने की आवश्यकता है। मॉडल मैट्रिक्स में मॉडल निर्देशांक को विश्व निर्देशांक में बदलने के लिए आवश्यक सभी परिवर्तन शामिल होंगे।, बस w = 1
निर्धारित करते हैं,
T = [ 1 0 0 x ]
[ 0 1 0 y ]
[ 0 0 1 z ]
[ 0 0 0 1 ]
M' = M * T
फिर आप दुनिया अंतरिक्ष में निर्देशांक (सुनिश्चित करें कि वे समरूप निर्देशांक पहले कर रहे हैं पाने के लिए अपने मॉडल मैट्रिक्स का उपयोग कर सकते हैं: उदाहरण के लिए, हर बार जब आप glTranslate
कहते हैं, आप अपने मॉडल मैट्रिक्स को अद्यतन करेगा वे नहीं हैं):
V' = V * M
आप समानांतर में इन परिवर्तनों को बनाए रखने रहे हैं, आप वास्तव में अब और ओपन modelview मैट्रिक्स को बनाए रखने की जरूरत नहीं है। आप अपने मॉडल मैट्रिक्स को अपने शेडर्स के लिए वर्दी के रूप में पास कर सकते हैं। आप अपने तरीके और प्रक्षेपण मैट्रिक्स को इसी तरह से बनाए रख सकते हैं। ओपनजीएल के हाल के संस्करणों में यह आवश्यक है; सभी मैट्रिक्स हैंडलिंग कार्यों को बहिष्कृत कर दिया गया है।
मैं अपने मॉडल मैट्रिक्स को कैसे बनाए रखूं ??? –
@Shazad, कुछ पृष्ठभूमि जानकारी और एक और विस्तार स्पष्टीकरण जोड़ा। उम्मीद है की वो मदद करदे। –
@Jay: सबसे पहले आपने कहा 'सी' = पी * वी * एम * सी', अंत में, आप कहते हैं कि 'वी' = एम * वी'। मैं थोड़ी उलझन में हूं, क्योंकि एक बार यह 'वी * एम' और एक बार 'एम * वी' है। मैट्रिक्स गुणा कम्यूटिव नहीं है, इसलिए 'ए * बी! = बी * ए'। क्या यह हो सकता है कि आपके उत्तर में आदेश गलत है? शायद यह भी मेरा गणित गलत है, हालांकि, उस मामले में मुझे सही करने के लिए स्वतंत्र महसूस करें। – Mecki
आप वर्चुअल कैमरा दृश्य मैट्रिक्स (वी-1) बार वस्तु का ModelView मैट्रिक्स (वी * एम) विश्व निर्देशांक पाने के लिए की प्रतिलोम के उत्पाद का उपयोग कर सकते हैं।
तुम बस के बाद gluLookAt() फ़ंक्शन का उपयोग कर वी मिलती है:
glGetFloatv (GL_MODELVIEW_MATRIX, camViewMatrix)
तो मैट्रिक्स को उलटने और यह स्टोर, (गुणा बाद में कोड में के लिए इस्तेमाल किया।)
आप कोई बिंदु जहां के बारे में वस्तु आकर्षित करने के लिए कर रहे हैं पर वी * एम पाने के तुरंत बाद सभी glTranslatef(), glRotatef() और glScale() एक ही जीएल समारोह का उपयोग कर आदेशों:
glGetFloatv (GL_MODELVIEW_MATRIX, objectsModelVie wMatrix);
वी-1 * (वी * एम) == एम
तो कई दो मेट्रिसेस, परिणामस्वरूप मैट्रिक्स स्थिति, M12 = एक्स, शामिल M13 = y और M14 = z
अधिक पर सी कोड के साथ विवरण: https://sourceforge.net/p/openantz/wiki/Local_to_World_Coordinates/
- 1. एक विश्व निर्देशांक को कैमरा निर्देशांक में कैसे परिवर्तित करता है?
- 2. एंड्रॉइड ओपनजीएल ईएस 2.0 स्क्रीन विश्व निर्देशांक
- 3. MATLAB अक्ष समन्वय को पिक्सेल निर्देशांक में कैसे परिवर्तित करें?
- 4. स्क्रीन निर्देशांक को सापेक्ष निर्देशांक (Winforms) बनाने के लिए कैसे परिवर्तित करें?
- 5. मैं 3 डी स्पेस निर्देशांक को 2 डी स्पेस निर्देशांक में कैसे परिवर्तित कर सकता हूं?
- 6. डिफाइनिंग लाइट निर्देशांक
- 7. एक टिंकर कैनवास में ऑब्जेक्ट के निर्देशांक कैसे प्राप्त करें?
- 8. MATLAB माउस को निर्देशांक कैसे प्राप्त करें
- 9. बेहतर निर्देशांक
- 10. मैं एक सर्कल पर निर्देशांक के लिए एक वर्ग पर निर्देशांक कैसे परिवर्तित कर सकता हूं?
- 11. टेक्स्ट आकार को डेटा निर्देशांक में परिवर्तित करना
- 12. कैनवास Fabric.js में निर्देशांक
- 13. मैं अक्षांश और देशांतर में निर्देशांक कैसे परिवर्तित करूं?
- 14. स्क्रीन में NSPoint कन्वर्ट खिड़की के निर्देशांक निर्देशांक
- 15. देश से निर्देशांक प्राप्त करें?
- 16. , कार्तीय निर्देशांक + ऊर्जा pymol
- 17. JFreeChart माउस निर्देशांक प्राप्त करें
- 18. अक्षांश और देशांतर को विश्व समन्वय में परिवर्तित करने के लिए कैसे करें Google मानचित्र
- 19. निर्देशांक कैसे प्रदर्शित करें और जीनपुट
- 20. ToolStripButton के निर्देशांक कैसे प्राप्त करें?
- 21. विभाजन 3 subspaces में निर्देशांक
- 22. एनएडी 83 निर्देशांक को आरजीडीएल पैकेज के साथ अक्षांश और देशांतर में कैसे परिवर्तित करें?
- 23. एंड्रॉइड फसल निर्देशांक
- 24. मैं दो WGS84 निर्देशांक
- 25. PDFBox PDFTextStripperByArea क्षेत्र निर्देशांक
- 26. जावास्क्रिप्ट: IE8 ईवेंट निर्देशांक
- 27. WinForms PictureBox में छवि स्थान निर्देशांक में स्क्रीन स्पेस निर्देशांक से मुझे अनुवाद कैसे करना चाहिए?
- 28. ग्रिड बदलें निर्देशांक प्रणाली
- 29. ध्रुवीय निर्देशांक में क्विवर प्लॉट कैसे बनाएं
- 30. निर्देशांक के साथ 100 मीटर मार्कर को कैसे स्थानांतरित करें
मैं रेखीय बीजगणित या मा के बारे में के बारे में पढ़ने की सलाह देते त्रिभुज बीजगणित और ग्राफिक्स पर एक पुस्तक भी। –