2012-01-23 19 views
5

मैं जेसन एल मैककेसन द्वारा "आधुनिक 3 डी ग्राफिक्स प्रोग्रामिंग सीखना" के माध्यम से 3 डी ग्राफिक्स प्रोग्रामिंग सीखने की कोशिश कर रहा हूं।3 डी ग्राफिक्स में, कैमरा या आंख की जगह क्या है?

मैंने वास्तव में अन्य मार्गदर्शिकाओं को नहीं देखा है, लेकिन यह मार्गदर्शिका 3 डी ग्राफिक्स के पीछे सिद्धांत और गणित पर जोर देती है। अभी, मैं इस पृष्ठ पर अटक कर रहा हूँ:

http://www.arcsynthesis.org/gltut/Positioning/Tut04%20Perspective%20Projection.html

मैं बिल्कुल यकीन है कि वह क्या कैमरा अंतरिक्ष से मतलब है नहीं कर रहा हूँ, और क्यों यह एक 2d सतह पर एक 3 डी दुनिया परियोजना के लिए आवश्यक है। यह सवाल अस्पष्ट है, इसलिए पूर्ण स्पष्टीकरण के बजाय, लिंक जो मुझे इन अवधारणाओं को समझाने का एक अलग तरीका दे सकता है, भी सराहना की जाएगी।

+0

क्षमा करें, मुझे यह स्पष्ट करना चाहिए था: मुझे पता है कि 3 डी दुनिया को 2 डी सतह पर प्रोजेक्ट करना क्यों आवश्यक है। मुझे नहीं पता था कि कैमरे की जगह इस अंत तक क्यों जरूरी या उपयोगी थी। – newprogrammer

उत्तर

5

कारण है कि यह एक 2d सतह पर एक 3 डी दुनिया परियोजना के लिए

सभी ग्राफिक्स के लिए आवश्यक है सिर्फ 2 डी छवियों है। इस प्रकार 3 डी ग्राफिक्स पिक्सल के लिए रंगों का उत्पादन करने की एक प्रणाली है जो आपको विश्वास दिलाती है कि जिस दृश्य को आप देख रहे हैं वह 2 डी छवि की बजाय 3 डी दुनिया है। 3 डी दुनिया को उस दुनिया की 2 डी छवि में परिवर्तित करने की प्रक्रिया को प्रतिपादन कहा जाता है।

प्रक्षेपण, प्रतिपादन के प्रयोजनों के लिए, एक आयामता से दूसरे में एक दुनिया को बदलने का एक तरीका है। हमारी गंतव्य छवि दो आयामी है, और हमारी प्रारंभिक दुनिया तीन आयामी है। इस प्रकार, हमें इस 3 डी दुनिया को 2 डी एक में बदलने का एक तरीका चाहिए।

मैं इस बिंदु से पहले कैमरे अंतरिक्ष

से बिल्कुल यकीन है कि वह क्या मतलब है नहीं कर रहा हूँ, शिखर पदों क्लिप अंतरिक्ष में सीधे व्यक्त किया गया। याद रखें कि विभाजन-दर-डब्ल्यू क्लिप स्पेस वर्टेक्स स्थितियों का हिस्सा है। परिप्रेक्ष्य प्रक्षेपण पदों को क्लिप स्पेस में बदलने का एक तरीका है, जैसे कि वे एक 3 डी दुनिया का परिप्रेक्ष्य प्रक्षेपण प्रतीत होता है।

इस परिवर्तन प्रक्रिया में अच्छी तरह से परिभाषित आउटपुट हैं: क्लिप स्पेस स्थिति। लेकिन इसके इनपुट मूल्य वास्तव में क्या हैं?

यह कैमरा स्थान है।

यह ऐसी जगह नहीं है जिसे ओपनजीएल पहचानता है (क्लिप-स्पेस के विपरीत जिसे स्पष्ट रूप से जीएल द्वारा परिभाषित किया गया है); यह पूरी तरह से एक मनमाना उपयोगकर्ता निर्माण है। हालांकि, हमारे परिप्रेक्ष्य प्रक्षेपण के बारे में हम जो जानते हैं उसके आधार पर एक विशेष कैमरा स्थान को परिभाषित करने के लिए उपयोगी हो सकता है।यह कैमरा स्पेस और क्लिप स्पेस के परिप्रेक्ष्य रूप के बीच अंतर को कम करता है, और यह हमारे परिप्रेक्ष्य प्रक्षेपण तर्क को सरल बना सकता है।

+0

ठीक है धन्यवाद। इस सवाल के सभी प्रतिक्रियाएं अच्छी थीं, लेकिन इस जवाब ने वास्तव में समझाया कि हमें कैमरे की जगह को परिभाषित करने की आवश्यकता क्यों है। मुझे यकीन नहीं है कि मैं इसे पूरी तरह से सही ढंग से समझ रहा हूं, लेकिन मुझे लगता है कि मुझे समझ में परेशानी हो रही है कि वह कैमरे की जगह का उपयोग क्यों करता है क्योंकि वह अभी तक कैमरे को स्थानांतरित करने के लिए कुछ भी नहीं कर रहा है, इसलिए मुझे आश्चर्य हुआ कि वह भी परेशान क्यों था यह पहली जगह में है। – newprogrammer

4

कैमरा स्पेस कैमरा के सापेक्ष समन्वय प्रणाली है। तो कैमरा स्थान वह जगह है जहां प्रोजेक्शन से पहले ज्यामिति समाप्त हो जाती है।

आम तौर पर आप मॉडल स्पेस में निर्देशांक के साथ शुरू करते हैं। आप जानते हैं कि मॉडल दुनिया से कैसे संबंधित है ताकि आप मॉडल स्पेस से विश्व अंतरिक्ष में मानचित्र कर सकें। फिर आपके पास दुनिया में एक कैमरा है, और आप इसके बारे में ज्ञान का उपयोग विश्व अंतरिक्ष से कैमरे की जगह पर मैप करने के लिए करते हैं। अगर कैमरे के सापेक्ष अंतरिक्ष में कोई बदलाव नहीं आया, तो कैमरा नहीं जा सका।

प्रक्षेपण आवश्यक है क्योंकि आपकी दुनिया 3 डी है और आपकी स्क्रीन 2 डी है। आप अपने कंप्यूटर मॉनिटर की 2 डी सतह पर 3 डी दुनिया से प्रोजेक्ट करते हैं। यहां तक ​​कि स्टीरियोस्कोपी भी एक के बजाय दो अनुमान हैं।

मुझे आपके द्वारा पहले से प्रदान किए गए किसी भी लिंक से तुरंत बेहतर जानकारी नहीं है।

+0

आपकी व्याख्या बहुत मदद कर रही है, धन्यवाद। यह मार्गदर्शिका बाद में कुछ अध्यायों तक मॉडल रिक्त स्थान या चलती कैमरों को पेश नहीं करती है, लेकिन जो आपने कहा है वह सहज ज्ञान युक्त समझ में आता है। – newprogrammer

+0

इसके अलावा, अगर मैं आपको सही ढंग से समझ रहा हूं, तो कैमरा स्पेस 2 डी विमान के किसी भी प्रक्षेपण से पहले है? – newprogrammer

+0

हां - मानक पॉलीगॉन रेंडरर के प्रवाह में प्रक्षेपण से पहले कैमरा स्थान अंतिम परिवर्तन का परिणाम है। – Tommy

8

अच्छा, आपकी स्क्रीन 2 डी सतह पर एक 3 डी सतह पर प्रोजेक्ट करना आवश्यक है क्योंकि आपकी स्क्रीन 2 डी सतह है।

3 डी ग्राफिक्स विभिन्न "समन्वय रिक्त स्थान" में काम करता है, और इन्हें अंतिम दृश्य प्राप्त करने के लिए बीच में परिवर्तित किया जाता है।

उदाहरण के लिए एक शहर मॉडलिंग की कल्पना करें। आप मानचित्र के निचले बाएं कोने को (0, 0), और शीर्ष दाएं (1000000, 1000000) के रूप में परिभाषित कर सकते हैं। आप यह भी कह सकते हैं कि एक नियम के रूप में, एक बिंदु वास्तविक स्थान के एक पैर का प्रतिनिधित्व करेगा। यह प्रतिनिधित्व हम विश्व अंतरिक्ष को बुलाएंगे।

अपने शहर को आकर्षित करने के लिए, आप भवनों के कुछ मॉडल आयात करना चाहते हैं, और उन्हें दुनिया में रखना चाहते हैं। तो आपको एक इमारत का मॉडल मिल गया है, लेकिन जब आप यह मॉडल बना रहे हैं, तो आप दुनिया के आकार या जहां यह होंगे, के बारे में चिंता करने की ज़रूरत नहीं है - आप शायद कहेंगे कि इमारत का निचला बायां कोने है पर (0, 0) और इसका शीर्ष दाएं (1, 1) पर है। यह प्रतिनिधित्व हम मॉडल स्पेस को कॉल करेंगे। हालांकि दुनिया में, इमारत को 104 (136, 136) पर रखा जा सकता है और आप इसे 1000x1000 पिक्सेल होना चाहते हैं, इसलिए आपको इसे (104, 136) में अनुवाद करना होगा और इसे 1000x तक स्केल करना होगा। यह इसे मॉडल स्पेस से वर्ल्ड स्पेस में परिवर्तित कर रहा है।

अंत में, कैमरा स्पेस यह है कि आप दुनिया में कैसे घूमते हैं। यदि आप इसके बारे में सोचते हैं, तो दुनिया भर में घूमने पर दो तरीकों से विचार किया जा सकता है (कम से कम): आप दुनिया भर में जाते हैं, या दुनिया आपके चारों ओर घूमती है। तो आंदोलन को आसान बनाने के लिए, हम कहेंगे कि कैमरा हमेशा धुरी (0, 0) पर कुछ धुरी का सामना कर रहा है। अब अगर आप 10 पिक्सेल आगे बढ़ना चाहते हैं, तो आप बस सब कुछ 10 पिक्सेल वापस ले जाएं। यदि आप घूमना चाहते हैं, तो इसके बजाय दुनिया को घुमाएं। तो इमारत को प्रस्तुत करने के लिए, पहले हम इसे मॉडल स्पेस से वर्ल्ड स्पेस में बदलना चाहते हैं। अब, वास्तव में इसे आकर्षित करने के लिए, हम जानना चाहते हैं कि यह दर्शक के सापेक्ष कहां है, इसलिए हम इसे विश्व अंतरिक्ष से कैमरा स्पेस तक ले जाते हैं।

। । ।

एक तरफ, यदि आप इसे बहुत अच्छी तरह से समझना चाहते हैं, तो एक अच्छा अभ्यास एक 3 डी वायरफ्रेम रेंडरर लिखना है, ओपनजीएल से अलग। आपका एकमात्र ड्राइंग फ़ंक्शन उपलब्ध है ड्रॉलाइन (x1, y1, x2, y2) जो स्क्रीन पर एक रेखा खींचता है (x1, y1) से (x2, y2)।

+0

यह काफी चुनौती होगी। आपके विवरण के लिये धन्यवाद! – newprogrammer

+1

यह उतना कठिन नहीं है जितना आप सोचेंगे। ट्रांसफॉर्म का उपयोग करने का कारण अंततः स्क्रीन पर अंतिम प्रक्षेपण करने के लिए होता है और यह पता लगाता है कि "जहां ये अंक हैं वे हैं"। असल में, एक वायरफ्रेम रेंडरर लिखने का मतलब यह होगा कि आप सभी मैट्रिक्स गुणाओं को स्वयं करते हैं - अनुवाद, रोटेशन, और फिर प्रक्षेपण। 3 डी ग्राफिक्स का वास्तव में कठिन हिस्सा छायांकन और क्लिपिंग है, लेकिन यदि आप एक वायरफ्रेम रेंडरर लिख रहे हैं तो आपको इसके बारे में चिंता करने की आवश्यकता नहीं होगी। और यह आपको गणित की वास्तव में सराहना और समझने देगा। – mindvirus

4

जल्दी

उत्तर देने के लिए कारण है कि यह (w/ई आप कार्यक्रम में परिभाषित) एक 3 डी दुनिया का प्रतिनिधित्व करने के

थिंक एक 2d सतह पर एक 3 डी दुनिया परियोजना के लिए जरूरी है कि एक का उपयोग कर 2 डी माध्यम, उदाहरण के लिए स्क्रीन। हालांकि कि काफी जटिल गणित का एक सा की जरूरत है ऐसा करने के लिए, तो यह निर्भर करता है कि क्या गहरी खरगोश छेद नीचे आप जाने के लिए तैयार हैं ...

विकिपीडिया (http://en.wikipedia.org/wiki/Graphics_pipeline) का हवाला देते हुए:

वस्तुओं तब्दील कर रहे हैं वर्चुअल कैमरे की स्थिति और अभिविन्यास के आधार पर 3-डी विश्व अंतरिक्ष समन्वय 3-डी समन्वय प्रणाली में समन्वयित करता है। इसका परिणाम मूल 3 डी दृश्य में होता है जैसा कि कैमरे के दृष्टिकोण से देखा गया है, जिसे आंख स्थान या कैमरा स्थान कहा जाता है। सामान्यीकृत परिवर्तन देखने के परिवर्तन के गणितीय उलटा है, और एक मनमानी उपयोगकर्ता द्वारा निर्दिष्ट समन्वय प्रणाली (यू, वी, डब्ल्यू) को एक कैननिकल समन्वय प्रणाली (x, y, z) में मैट्रिकल उलटा है।

+0

मैं इस गाइड के रूप में गहराई से जा रहा हूं, और ऐसा लगता है जैसे मैं काफी गहरी जा रहा हूं! – newprogrammer