3D मॉडल के समन्वय परिवर्तन के बारे में
सार तत्व
सबसे पहले
आप अक्सर टीवी स्क्रीन पर 3 डी छवियां देख सकते हैं और गेम में प्रदर्शित होते हैं, लेकिन आप 3 डी स्पेस में मौजूद वस्तुओं को कैसे प्रदर्शित करते हैं, जैसे कि वर्ण और इमारतें जो स्क्रीन पर घूमती हैं, 2 डी स्क्रीन पर?
2 डी गेम में, समन्वय मूल्यों के रूप में "एक्स और वाई" के केवल दो-आयामी तत्व हैं, और डिस्प्ले भी 2 डी है, इसलिए यदि आप एक्स और वाई की समन्वय स्थिति निर्दिष्ट करके किसी ऑब्जेक्ट को आकर्षित करते हैं, तो आप सहज रूप से समझेंगे कि यह किस स्थिति में खींचा जाएगा।
लेकिन 3D में यह इतना आसान नहीं है। जैसा कि नाम से पता चलता है, 3 डी "3 आयाम" है और इसमें तीन समन्वय जानकारी है: "एक्स, वाई और जेड"। चूंकि निर्देशांक डिस्प्ले से अलग हैं जो 2 डी है, इसलिए ऑब्जेक्ट को आकर्षित करना संभव नहीं है।
फिर, क्या करना है "त्रि-आयामी जानकारी को दो-आयामी जानकारी में परिवर्तित करना"। इसे आमतौर पर "समन्वय परिवर्तन" के रूप में जाना जाता है। ध्यान रखें कि 3D प्रोग्रामिंग के लिए यह समन्वय परिवर्तन आवश्यक है।
3 डी को 2 डी में परिवर्तित करने के लिए कई प्रकार के समन्वय परिवर्तन हैं, लेकिन तीन मुख्य प्रकार के समन्वय परिवर्तन हैं जो प्रोग्रामर संभालते हैं: "विश्व परिवर्तन", "दृश्य परिवर्तन" और "प्रक्षेपण परिवर्तन"। यहां, हम समन्वय परिवर्तन से संबंधित सब कुछ समझाएंगे।
बाएं हाथ और दाएं हाथ के समन्वय प्रणाली
3 डी में, दो समन्वय प्रणालियां हैं, "बाएं हाथ की समन्वय प्रणाली" और "दाएं हाथ की समन्वय प्रणाली", जिनमें प्रत्येक समन्वय के लिए अलग-अलग अभिविन्यास हैं जैसा कि नीचे दिए गए आंकड़े में दिखाया गया है।
Direct3D मुख्य रूप से बाएं हाथ की समन्वय प्रणाली का उपयोग करता है, लेकिन दाएं हाथ के समन्वय प्रणालियों की गणना के लिए भी कार्य हैं। हालाँकि, XNA केवल दाएं हाथ के समन्वय प्रणालियों के लिए गणना विधियां प्रदान करता है। यह इस तथ्य के अनुरूप प्रतीत होता है कि अन्य अनुप्रयोग अक्सर दाएं हाथ के समन्वय प्रणालियों का उपयोग करते हैं।
इस साइट पर सभी XNA युक्तियाँ दाएं हाथ की समन्वय प्रणाली का उपयोग करती हैं।
स्थानीय समन्वय प्रणाली (मॉडल समन्वय प्रणाली)
प्रत्येक मॉडल में मूल पर केंद्रित एक समन्वय प्रणाली होती है। मॉडलिंग सॉफ्टवेयर के साथ एक मॉडल बनाते समय, मुझे लगता है कि यह समझना आसान है कि क्या आप इसे केंद्र के रूप में मूल के साथ बनाने की कल्पना करते हैं।
विश्व समन्वय प्रणाली
विश्व समन्वय प्रणाली आपको मॉडल को कहीं भी रखने की अनुमति देती है। यदि आप इस विश्व परिवर्तन में कुछ नहीं करते हैं, तो मॉडल को स्थानीय निर्देशांक की तरह ही मूल स्थान पर रखा जाएगा। प्लेसमेंट न केवल मूल से स्थानांतरित करने के लिए है, बल्कि घूमने और स्केल करने के लिए भी है।
समन्वय प्रणाली देखें
एक बार जब आप मॉडल को विश्व निर्देशांक में रख देते हैं, तो आपको इस बारे में जानकारी चाहिए कि आप कहां देख रहे हैं और आप 3D स्पेस को कहां देख रहे हैं। इसे हम "दृश्य परिवर्तन" कहते हैं। दृश्य परिवर्तनों को आमतौर पर अक्सर कैमरों के रूप में दर्शाया जाता है।
इस रूपांतरण के लिए आवश्यक पैरामीटर "कैमरा स्थिति", "कैमरा पॉइंट ऑफ़ इंटरेस्ट" और "कैमरा ऊपर की दिशा" हैं। कैमरे का ओरिएंटेशन इन तीन मापदंडों द्वारा निर्धारित किया जाता है। नीचे दिया गया आंकड़ा कैमरे को तीसरे पक्ष के दृष्टिकोण से दिखाता है।
नीचे दिया गया आंकड़ा वास्तव में ऊपर की आकृति में दिखाई गई व्यवस्था के साथ कैमरे के दृष्टिकोण से देखा जाता है (इस बिंदु पर, हमने अभी तक निर्देशांक को स्क्रीन में परिवर्तित नहीं किया है, इसलिए यह सिर्फ एक छवि है)।
पिछली व्याख्या में, ऐसा लगता है कि कैमरा स्थित है और निर्देशांक बदल गए हैं, लेकिन वास्तविक गणना में, विश्व निर्देशांक कैमरे की स्थिति और अभिविन्यास के अनुसार परिवर्तित हो जाते हैं। इसलिए, मूल कैमरे की स्थिति है जैसा कि नीचे दिए गए चित्र में दिखाया गया है।
प्रोजेक्टिव समन्वय प्रणाली
एक बार जब आप यह तय कर लेते हैं कि 3D स्थान को किस स्थिति से देखना है, तो अगला कदम "छोटी वस्तुएं जो बहुत दूर हैं" और "बड़ी चीजें जो पास हैं" के प्रदर्शन को संसाधित करना है। इसे प्रोजेक्टिव ट्रांसफॉर्मेशन कहा जाता है। प्रक्षेपण परिवर्तन के दो तरीके हैं, "परिप्रेक्ष्य प्रक्षेपण" और "ऑर्थोग्राफिक प्रक्षेपण", लेकिन आमतौर पर इस्तेमाल की जाने वाली "परिप्रेक्ष्य प्रक्षेपण" छवि इस प्रकार है।
परिप्रेक्ष्य प्रक्षेपण निम्नलिखित मापदंडों का उपयोग करता है: देखने का कोण, पहलू अनुपात, आगे क्लिप स्थिति, और रियर क्लिप स्थिति। ऊपर दिए गए आंकड़े में "फ्रस्टम" लेबल वाला क्षेत्र अंत में स्क्रीन पर दिखाई देगा।
"ViewViewing Angle" कैमरे से दिखाई देने वाली व्यूइंग रेंज को निर्दिष्ट करता है। कोण को कम करने से ज़ूम इन होता है, बढ़ने से यह ज़ूम आउट हो जाता है। देखने का कोण फ्रैस्टम का ऊर्ध्वाधर मूल्य होगा।
पहलू अनुपात का उपयोग देखने के क्षैतिज कोण को निर्धारित करने के लिए किया जाता है, जबकि देखने का कोण एक ऊर्ध्वाधर कोण है। क्षैतिज कोण आमतौर पर "देखने के कोण × पहलू अनुपात" द्वारा निर्धारित किया जाता है, और पहलू अनुपात मूल रूप से उस स्क्रीन की "चौड़ाई ÷ ऊंचाई" का मान होता है जिसे आप प्रदर्शित करने का प्रयास कर रहे हैं। यदि आप इस मान को बदलते हैं, तो प्रदर्शित 3D ऑब्जेक्ट क्षैतिज या लंबवत रूप से फैलता हुआ दिखाई देगा।
फ़ॉरवर्ड क्लिप स्थिति और रियर क्लिप स्थिति यह निर्धारित करने के लिए निर्दिष्ट की जाती है कि ऑब्जेक्ट आगे या पीछे की सीमा में प्रदर्शित होता है या नहीं। कंप्यूटर की प्रकृति के कारण, अनंत तक प्रदर्शित करना संभव नहीं है, इसलिए हम एक सीमा निर्धारित करेंगे। यह मान Z-बफर की सटीकता को भी प्रभावित करता है, इसलिए इसे उस सीमा से परे ड्राइंग क्षेत्र में शामिल करने की अनुशंसा नहीं की जाती है जिसे प्रदर्शित करने की आवश्यकता नहीं है।
परिप्रेक्ष्य रूपांतरित वस्तु को नीचे की तरह एक स्थान में परिवर्तित किया जाता है। जो ऑब्जेक्ट कैमरे के करीब थे, उन्हें ज़ूम इन किया जाता है, और जो ऑब्जेक्ट दूर थे उन्हें छोटा कर दिया जाता है।
यह नीचे आसानी से समझ में आने वाले आरेख में दिखाया गया है।
यदि आप वास्तव में इसे कैमरे के दृष्टिकोण से देखते हैं, तो यह नीचे जैसा दिखता है।
प्रोजेक्टिव ट्रांसफॉर्मेशन का एक अन्य तरीका ऑर्थोग्राफिक प्रोजेक्शन है, जो नीचे दिए गए दृश्य क्षेत्र को प्रोजेक्ट करता है। क्योंकि चौड़ाई और ऊंचाई गहराई की परवाह किए बिना स्थिर हैं, वस्तु का आकार गहराई के साथ नहीं बदलता है।
स्क्रीन समन्वय प्रणाली
प्रक्षेपण परिवर्तन के बाद, इसे वास्तविक स्क्रीन के निर्देशांक में बदल दिया जाता है। भले ही यह एक स्क्रीन है, डिवाइस पर सेट व्यूपोर्ट सेटिंग्स के आधार पर डिस्प्ले की स्थिति और सीमा बदल जाती है। हालांकि, गेम के मामले में, विंडो के क्लाइंट निर्देशांक अक्सर व्यूपोर्ट होते हैं, इसलिए मुझे नहीं लगता कि आपको बहुत अधिक चिंता करने की आवश्यकता है।
स्क्रीन के निर्देशांक (0, 0) प्रक्षेपण निर्देशांक (-1, 1, z) से परिवर्तित होते हैं। इसी तरह, स्क्रीन निर्देशांक (चौड़ाई, ऊंचाई) प्रक्षेपण निर्देशांक (1, -1, z) से परिवर्तित होते हैं।