OpenGL में क्लिप स्पेस के 4 आयाम क्यों हैं?


13

मैं इसे एक सामान्य संदर्भ के रूप में उपयोग करूंगा, लेकिन जितना अधिक मैं ब्राउज़र ऑनलाइन डॉक्स और किताबें, उतना कम मैं इस बारे में समझता हूं।

const float vertexPositions[] = {
    0.75f, 0.75f, 0.0f, 1.0f,
    0.75f, -0.75f, 0.0f, 1.0f,
    -0.75f, -0.75f, 0.0f, 1.0f,
};

इस ऑनलाइन पुस्तक में एक उदाहरण है कि कैसे एक त्रिकोण बनाने के बारे में ओपनजीएल के लिए पहली और क्लासिक हैलो दुनिया को आकर्षित किया जाए।

त्रिकोण के लिए शीर्ष संरचना को ऊपर दिए गए कोड में बताया गया है।

इस बारे में अन्य सभी स्रोतों के रूप में पुस्तक, इस बिंदु पर जोर देती है कि क्लिप स्पेस एक 4D संरचना है जिसका उपयोग मूल रूप से यह तय करने के लिए किया जाता है कि स्क्रीन पर रैस्टराइज़ और रेंडर किया जाएगा।

यहाँ मेरे सवाल हैं:

  • मैं 4D में कुछ कल्पना नहीं कर सकता, मुझे नहीं लगता कि एक इंसान ऐसा कर सकता है, इस क्लिप स्पेस के लिए 4D क्या है?
  • सबसे मानव-पठनीय डॉक्टर जो मैंने पढ़ा है, एक कैमरा के बारे में बोलता है, जो क्लिपिंग अवधारणा पर सिर्फ एक अमूर्त है, और मुझे लगता है कि, समस्या यह है कि पहली बार में कैमरे की अवधारणा का उपयोग क्यों नहीं किया जाता है जो कि अधिक है परिचित 3 डी संरचना? कैमरे की अवधारणा के साथ एकमात्र समस्या यह है कि आपको दूसरे तरीके से भावी को परिभाषित करने की आवश्यकता है और इसलिए आपको मूल रूप से एक और बयान जोड़ना होगा कि आपके पास किस तरह का कैमरा है।
  • मैं इसे कैसे पढूं 0.75f, 0.75f, 0.0f, 1.0f? मुझे केवल इतना मिलता है कि वे सभी फ्लोट वैल्यू हैं और मुझे पहले 3 मानों का मतलब मिलता है, इसका अंतिम अर्थ क्या है?


2
@NicolBolas लेखक पहले अध्याय में अपना स्पष्टीकरण देता है और अगले अध्याय के लिए कोई संदर्भ नहीं देता है, साथ ही वह यह समझाने का नाटक करता है कि कुछ c ++ कोड टिप्पणी करते समय आगे क्या होता है और समस्या यह है कि यदि वह पूरी तरह से सब कुछ नहीं समझाता है 1 अध्याय को अध्याय संख्या 4 में पहले स्थान पर जानने के लिए क्या करना चाहिए, यह बताने के लिए बहुत अधिक समझ में नहीं आता है, खासकर अगर मुझे इस अवधारणा की आवश्यकता है कि 1 अध्याय के अंदर क्या है। मैं इसे अभी पढ़ रहा हूं, और सिर्फ 1 बार नहीं, अब मुझे पता है कि मुझे जवाब के लिए आगे देखना चाहिए, मैं विभिन्न अध्यायों को गढ़ूंगा।
user827992

1
आपको कुछ भी डिकोड करने की आवश्यकता नहीं है; यह अध्याय 1 में कहता है: डब्ल्यू घटक को अन्य 3 घटकों में विभाजित किया गया है। यह परिचय में भी कहा गया था। अध्याय 4 तक क्यों रखा गया है, इसलिए ओपनजीएल ऐसा करता है। यह बाद में बंद रखा जाता है क्योंकि यह हाथ में काम के लिए अप्रासंगिक है।
निकोल बोलस

3
यह अभी भी हाथ में मुद्दे के लिए अप्रासंगिक जानकारी होगी (यानी: एक त्रिकोण प्रदान करना)। आप इसके बारे में उत्सुक हैं, लेकिन आपको यह समझने की ज़रूरत नहीं है कि यह जिस तरह से यह समझने का तरीका है कि यह कैसे काम करता है। कुछ भी सीखने में, पहला कदम यह समझना है कि यह क्या है। एक बार जब आप समझ जाते हैं कि क्या चल रहा है, तो एक चर्चा हो सकती है कि यह उस तरह से क्यों है।
निकोल बोलस

1
यह उत्तर मदद कर सकता है।
.मिलिंद

जवाबों:


9

जादू शब्द "सजातीय निर्देशांक" है, जो उन प्रणालियों में उपयोग किया जाता है जहां दृष्टिकोण एक कारक है। अवलोकन के लिए विकि की जाँच करें, लेकिन यह वास्तव में इसे समझने के लिए अध्ययन का एक लंबा कोर्स है (जो मैं नहीं करता)।


10

आपके द्वारा पढ़ी गई पुस्तकों का परिचय पढ़ें, आपको आश्चर्य होगा;)

http://arcsynthesis.org/gltut/Basics/Intro%20Graphics%20and%20Rendering.html रेखांकन अवलोकन के तहत

"W" मान (जहां पहले 3 मान x, y और z हैं) मूल रूप से कहते हैं कि क्लिप स्पेस के आयाम क्या हैं। क्योंकि यह 1 स्केलर मान है, क्लिप स्पेस के सभी 3 आयाम समान हैं (और यही कारण है कि क्लिप स्पेस एक क्यूब है)। प्रत्येक शीर्ष पर इसकी स्वयं की क्लिप स्पेस होती है जिसमें यह मौजूद होता है (और मूल रूप से इसमें "फिट" करने की आवश्यकता होती है, अन्यथा यह CLIPS: D), 1 "दुनिया" नहीं है जो क्लिप स्पेस है (हालांकि सभी क्लिप स्पेस समान हैं " दुनिया "मुझे लगता है, यहां तक ​​कि मैं इससे परेशान हूं; पी)।

इसलिए यदि आपके शीर्ष पर उदाहरण के लिए समन्वय है [1,1,1], यदि क्लिप स्पेस 1 है तो स्क्रीन के कोने के पास शीर्ष दाईं ओर शीर्ष है (जब सभी डिफ़ॉल्ट है, मुझे नहीं पता कि क्या दिशाएं हैं बदल सकता है)। लेकिन अगर शीर्ष पर 2 का क्लिप स्पेस है, तो निर्देशांक [1,1,1] कहीं न कहीं ऐसा होगा कि मान लीजिए, स्क्रीन के दाईं ओर 3 तिमाहियों, शीर्ष पर स्क्रीन के पार 3 तिमाहियों, और तीसरा आयाम अपने आप अनुमान लगा सकते हैं।

मुझे लगता है कि मान लें कि 5 का एक क्लिप स्पेस का मतलब होगा कि क्लिप स्पेस रेंज में 5 से 5 के बीच के हर आयाम पर क्यूब 5x5x5 है। लेकिन ऐसा शायद इसलिए है क्योंकि सीधे शब्दों में कहें: सभी xy और z निर्देशांक क्लिप स्पेस आयाम से विभाजित होते हैं, इसलिए मूल रूप से आपके कोने इस से गुजरते हैं:

x = x / w

y = y / डब्ल्यू

z = z / w

और यही सब संभव बनाता है। मुझे लगता है कि यह मौजूद कारण आसान तुलना के लिए है। यदि निर्देशांक को क्लिप स्पेस आयाम द्वारा विभाजित किया गया है, तो 1 से अधिक मान वाले 1 या अधिक घटक वाले समन्वय क्लिप स्पेस के बाहर मौजूद हैं। इसलिए यदि आपका क्लिप स्पेस 1024 कहलाता है, लेकिन निर्देशांक [2000,3, -100] है तो x (2000) घटक क्लिप स्पेस के बाहर है (जो केवल -1024 से 1024 तक है)।

कंप्यूटिंगवाइज यह बताना आसान है कि अगर क्लिपस्पेस के अंदर कुछ है अगर आपको बस इतना करना है (बहुत ही गंभीर तरीके से टो): (x / w) <1 && (x / w)> - 1 तो रेंडर करें। इसके अलावा, मुझे लगता है कि सभी वर्टिकल के सभी क्लिप स्पेस एक ही साइज के होते हैं (इसलिए हर आयाम में -1 से 1 तक का हर क्लिप स्पेस क्यूब) नॉर्मलाइजेशन प्रक्रिया के बाद जो कुछ भी आता है, उसे आसान बना देता है, यह देखते हुए कि सभी निर्देशांकों पर उसी क्षण से 0 से 1 तक तैरता है (यह अवहेलना जो बंद कर दिया गया है)।


सवाल यह था कि क्लिप-स्पेस ऐसा क्यों है, न कि क्लिप-स्पेस का मतलब क्या है। यही है, विभाजन-दर-डब्ल्यू की बात क्या है।
निकोल बोलस

2
यह 3 बुलेट पॉइंट्स के 3 वें प्रश्न का उत्तर देता है, हालांकि =)
डैमक्वाइल

8

TL; DR यह 4D स्पेस नहीं है, यह 3D प्लस स्केलिंग नंबर है जो लगभग हमेशा 1 होता है। यदि यह 1 है, तो आप इसे अनदेखा कर सकते हैं और पहले तीन नंबर x, y, z हैं। यदि यह अधिक जटिल नहीं है।

यहाँ एक सरल व्याख्या है। 3 डी में कार्यक्षेत्र केवल तीन घटक होने चाहिए

⌈x⌉ v = |y| ⌊z⌋

यदि हम उन्हें हेरफेर करना चाहते हैं (जैसे रोटेशन, स्केलिंग आदि) तो हम एक मैट्रिक्स का उपयोग करते हैं। पाठ्यक्रम का सबसे आम उदाहरण मॉडल-व्यू-प्रोजेक्शन (एमवीपी) मैट्रिक्स है जो दुनिया के समन्वय को क्लिप स्पेस में बदल देता है। ऐशे ही:

⌈m11 m12 m13⌉ ⌈x⌉ c = |m21 m22 m23| * |y| ⌊m31 m32 m33⌋ ⌊z⌋

हालाँकि इसका एक बड़ा दोष है: आप अनुवाद नहीं कर सकते। यदि [x,y,z]शून्य है, तो कोई फर्क नहीं पड़ता कि mपरिणाम हमेशा शून्य होगा, इसलिए हमारे पास एक एमवीपी नहीं हो सकता है जिसमें अनुवाद शामिल है। जाहिर है कि हम ऐसा चाहते हैं। इसका समाधान हमारे वैक्टर के अंत में 1 जोड़ना और मैट्रिक्स को 4x4 तक विस्तारित करना है:

⌈cx⌉ ⌈m11 m12 m13 tx⌉ ⌈x⌉ |cy| = |m21 m22 m23 ty| * |y| |cz| |m31 m32 m33 tz| |z| ⌊ 1⌋ ⌊ 0 0 0 1⌋ ⌊1⌋

(यदि आप किसी ऑर्थोगोनल एमवीपी मैट्रिक्स को देखते हैं - जैसे कि glOrtho()- आप पाएंगे कि 4 वीं पंक्ति है 0 0 0 1। कभी-कभी इसे छोड़ दिया जाता है।) यदि आप गणित के माध्यम से काम करते हैं, तो आप देखेंगे कि यह वही है।

⌈cx⌉ ⌈m11 m12 m13⌉ ⌈x⌉ ⌈tx⌉ |cy| = |m21 m22 m23| * |y| + |ty| ⌊cz⌋ ⌊m31 m32 m33⌋ ⌊z⌋ ⌊tz⌋

4 वाँ घटक कहा जाता है w, और जबकि इसे 1 होना ही नहीं है , यह लगभग हमेशा होता है ( किसी भी तरह से परिवर्तन से पहले ; बाद में इसे आम तौर पर पूरे वेक्टर को विभाजित करके पुन: समरूप बनाया जाता है wताकि यह फिर से 1 हो जाए)। ट्रांसफॉर्मेशन मैट्रिसेस को ट्रांसलेशन में शामिल करने की अनुमति देना हैक की तरह है।

संपादित करें

मेरा मानना ​​है कि मूल प्रेरणा परिप्रेक्ष्य अनुमानों के लिए थी , जो 3 डी निर्देशांक के साथ असंभव है। ऐसे अन्य रूपांतरण हैं जो आप केवल 4D वैक्टर से कर सकते हैं, लेकिन अनुवाद को समझना सबसे आसान है।


2
अपने पतन की व्याख्या करें।
टिमम्म

+1, जानकारी को सही मानते हुए, यह एक अच्छी व्याख्या थी और मेरे लिए मददगार थी। धन्यवाद
ल्यूक

1

एक और कारण यह भी है कि मैं देख रहा हूं और पिछले उत्तरों में इसका उल्लेख नहीं किया गया था।

अनुवाद मैट्रिसेस 4x4 हैं ताकि आप "दुनिया" के आसपास की वस्तु का अनुवाद भी कर सकें। क्योंकि एक 3x3 मैट्रिक्स के साथ आप 3 डी कोऑर्डिनेट कर सकते हैं और स्केल कर सकते हैं, लेकिन आप एक 3 डी कोर्डिनेट को केवल 4x4 मैट्रिक्स से ट्रांसलेट कर सकते हैं, यहाँ से 4 डी वेक्टर में 3 डी कोर्डिनेट को व्यक्त करने की आवश्यकता है।


आपको ऐसी परिभाषाओं के तहत केवल 4 डी वेक्टर की "आवश्यकता" है। एक 4x4 मैट्रिक्स सिर्फ जोड़ने के उद्देश्य के लिए नहीं है जैसे हर कोई दूसरों को ग्रहण करना और दावा करना पसंद करता है। यदि आप चाहते थे कि रोटेशन (एक 3D बिंदु पर) के बाद अनुवाद जोड़ना है तो आप केवल 4x3 मैट्रिक्स को परिभाषित करेंगे। यह बहुत अधिक कुशल है अगर यह सब तुम्हारे बाद है। आपको अपने आप को उन नियमों तक सीमित नहीं रखना है, जो अन्य कारणों की एक पूरी बंडल के लिए बनाए गए थे, सिर्फ इसलिए कि यह भद्दा दिखता है। lol
पुडल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.