अंतिम स्थिति के रूप में ग्राफिक्स कार्ड वेक्टर के चौथे तत्व के साथ क्या करता है?


25

से इस सवाल यह प्रतीत होता है कि आप एक चार तत्व स्थिति वेक्टर चाहेगा, के रूप में यह आसान है आव्यूह गुणन के साथ अपनी स्थिति को संशोधित करने के।

अपने दम पर यह चौथा तत्व आसानी से नजरअंदाज कर दिया जाना चाहिए जब इसे एक 3 डी बिंदु के प्रतिनिधित्व के रूप में माना जाता है (कोई परिवर्तन नहीं मानते), लेकिन मुझे पता है कि यह सच नहीं है, जब मैं GPU के लिए एक वेक्टर 4 की आपूर्ति करता हूं, अगर चौथा तत्व एक नहीं है, इसका प्रतिपादन नहीं किया गया है - क्यों?

चौथे तत्व का क्या महत्व है, एक बार यह रास्टराइज़र में है?

EDIT : इस प्रश्न की समीक्षा करने पर यह प्रश्न कुछ हद तक खराब था; दूसरे पैराग्राफ के लिए यह कहना अधिक सटीक होगा: "यदि चौथे तत्व का मान एक निश्चित सीमा के भीतर नहीं है, तो इसे 'सही' / 'अपेक्षित' के रूप में प्रस्तुत नहीं किया गया है।"


निर्देशांक (x, y, z, 0.5) के साथ एक वेक्टर 4 निर्देशांक (2x, 2y, 2z, 1) के साथ वेक्टर 4 के समान परिणाम नहीं देता है?
FxIII

@FxIII, मैं इसे ठीक से पुन: पेश करने में सक्षम नहीं था, लेकिन आप सही हैं कि मेरे मूल पोस्ट में एक गलत कंबल बयान किया गया था, कुछ और प्रयोग के बाद मैंने इसे अपडेट किया है।
sebf

जवाबों:


23

चौथा घटक परिप्रेक्ष्य प्रक्षेपण का ट्रैक रखने के लिए एक चाल है। जब आप एक परिप्रेक्ष्य प्रक्षेपण करते हैं, तो आप z: x '= x / z, y' = y / z से विभाजित करना चाहते हैं, लेकिन यह एक ऑपरेशन नहीं है जिसे x के वेक्टर पर संचालित 3x3 मैट्रिक्स द्वारा कार्यान्वित किया जा सकता है। y, z ऐसा करने के लिए जो चाल मानक हो गई है, वह है चौथे समन्वय को जोड़ना, w, और यह घोषणा करना कि x, y, z को हमेशा सभी परिवर्तनों को लागू करने और रेखापुंज से पहले w द्वारा विभाजित किया जाएगा।

परिप्रेक्ष्य प्रक्षेपण तब एक मैट्रिक्स होने से पूरा होता है जो z को w में ले जाता है, ताकि आप z द्वारा विभाजन को समाप्त कर दें। लेकिन यह आपको w = 1.0 छोड़ने की सुविधा भी देता है यदि आप एक विभाजन नहीं करना चाहते हैं; उदाहरण के लिए यदि आप सिर्फ एक समानांतर प्रक्षेपण चाहते हैं, या एक रोटेशन या जो भी हो।

डब्ल्यू = 1 के रूप में पदों को एनकोड करने की क्षमता, डब्ल्यू = 0 के रूप में निर्देश और अनुवाद के लिए एक मैट्रिक्स की चौथी पंक्ति / स्तंभ का उपयोग करना एक अच्छा पक्ष लाभ है, लेकिन यह डब्ल्यू को जोड़ने का प्राथमिक कारण नहीं है। दृष्टि में किसी भी w के बिना अनुवाद को पूरा करने के लिए एक affine परिवर्तनों (एक 3x3 मैट्रिक्स प्लस 3-घटक अनुवाद वेक्टर) का उपयोग कर सकता है। (किसी को क्या स्थिति है और क्या दिशा है, इसका ट्रैक रखना होगा, और प्रत्येक के लिए अलग-अलग परिवर्तन कार्य लागू होंगे; यह थोड़ा असुविधाजनक है, लेकिन वास्तव में बड़ी बात नहीं है।)

(BTW, गणितीय रूप से, w के साथ संवर्धित वैर को सजातीय निर्देशांक के रूप में जाना जाता है , और वे एक स्थान पर रहते हैं जिसे प्रक्षेप्य स्थान कहा जाता है । हालांकि, आपको 3D ग्राफिक्स करने के लिए उच्च गणित को समझने की आवश्यकता नहीं है।)


एक बार फिर से उन बिंदुओं में वैक्टर और बिंदुओं के बारे में बात करना थोड़ा गलत है क्योंकि बिंदु और वैक्टर के बीच एक समरूपता है (उस बिंदु से मूल को स्थानांतरित करने वाले बिंदु और वेक्टर एक ही इकाई हैं)। अंक / वैक्टर (डब्ल्यू! = 0) और (प्रोजेक्टिव) दिशाओं (डब्ल्यू = 0) के बारे में बात करने के लिए अधिक सही होगा। वैसे भी "वेक्टर" शब्द का दुरुपयोग 3 डी पुस्तकालयों की भाषा में काफी समेकित मानक है।
FxIII

@FxIII: सही किया गया यह मानक गणित अर्थ में "वेक्टर" का उपयोग करने और एक ही पोस्ट में "दिशा" के लिए एक पर्याय के रूप में भ्रमित करने वाला था।
निकोल बोलस

@FxIII और निकोल बोलस: मैं असहमत हूं। आप वास्तव में एन्कोड कर वैक्टर दोनों वैक्टर कि सिर्फ एक दिशा, और वास्तविक वैक्टर प्रतिनिधित्व करते हैं जहां लंबाई महत्वपूर्ण है सहित - = 0 डब्ल्यू के रूप में। उदाहरण के लिए, आप ऑब्जेक्ट के मैट्रिक्स का उपयोग करके स्थानीय अंतरिक्ष और विश्व अंतरिक्ष के बीच एक वस्तु के कोणीय वेग वेक्टर (दिशा = रोटेशन अक्ष, लंबाई = गति) को बदल सकते हैं। आप नहीं चाहते कि कोणीय वेग वस्तु के अनुवाद को इसमें जोड़े; आप केवल इसे घुमाया जाना चाहते हैं। तो आप w = 0. सेट करें, मुझे समस्या नहीं दिख रही है?
नाथन रीड

@NathanReed मुझे उम्मीद है कि मेरी पोस्ट बिंदु को स्पष्ट करने में मदद करती है, वैसे भी मेरी बात का एक बड़ा हिस्सा परिभाषाओं पर है और शब्द सदिश के दुरुपयोग के साथ साथ मानक 3 डी लाइब्रेरी शब्दावली पर रैखिक बीजगणित की प्रधानता है। बेशक दोनों हर परिभाषा के रूप में बहस करने वाले हैं और प्रधानता का दावा है
FxIII

@ नथन, मैं अब स्पष्ट रूप से चौथे तत्व का उद्देश्य देख सकता हूं, और इसमें जो जानकारी है उसका उपयोग रैस्टराइज़र द्वारा किया जाता है। आपका बहुत बहुत धन्यवाद!
sebf

10

नातान की उपयुक्त टिप्पणी का जवाब देने की कोशिश करते हुए, मैंने कुछ विचार किया जो यह समझने के लिए उपयोगी हो सकता है कि वास्तव में क्या होता है जब आप मानक यूक्लिडियन अंतरिक्ष में 3 डी वैक्टर का प्रतिनिधित्व करने के लिए Affine Space में वैक्टर का उपयोग करते हैं।

पहले मैं वेक्टर को कॉल करूँगा जो भी निर्देशांक हैं, इसलिए एक बिंदु और एक वेक्टर एक ही इकाई हैं; आप एक वेक्टर को दो बिंदुओं के अंतर के रूप में देख सकते हैं: वी = बी - ; वी ले जाता है एक में बी क्योंकि एक + V = एक + बी - एक = बीA = 0 (मूल) डालें और आपको वह V = B - 0 = B मिलेगा : बिंदु B और सदिश जो 0 चलता हैकरने के लिए बी एक ही बात कर रहे हैं।

मैं "वेक्टर" कहूंगा - 3 डी पुस्तकालयों के बहुमत में उपयोग किए जाने वाले अर्थों में - जब affine अंतरिक्ष के एक वेक्टर में w = 0 होता है।

मैट्रिक्स का उपयोग किया जाता है क्योंकि वे आपको एक रेखीय फ़ंक्शन को एक कॉम्पैक्ट / सुरुचिपूर्ण / कुशल रूप में प्रदर्शित करने की अनुमति देते हैं, लेकिन रैखिक कार्यों का प्रमुख नुकसान है जो मूल को नहीं बदल सकता है: F ( 0 ) = 0 यदि F रैखिक बनना चाहता है ( अन्य वस्तु जैसे F (λ X ) = λF ( X ) और F ( A + B ) = F ( A ) + F ( B ))

इसका मतलब है कि आप एक मैट्रिक्स का निर्माण नहीं कर सकते हैं जो अनुवाद करता है क्योंकि आप कभी भी 0 वेक्टर को स्थानांतरित नहीं करेंगे । यहाँ Affine Space खेलने के लिए आता है । एफिलिन स्थान यूक्लिडियन अंतरिक्ष के लिए एक आयाम जोड़ता है ताकि तराजू को स्केलिंग और घुमाव के साथ किया जा सके।

अफ्फिन स्पेस इस अर्थ में एक अनुमानित स्थान है कि आप एफिन और यूक्लिडियन वैक्टर के बीच एक समानता संबंध बना सकते हैं ताकि आप उन्हें भ्रमित कर सकें (जैसा कि हमने संकेत और वैक्टर के साथ किया था)। सभी चक्करदार वैक्टर जो एक ही दिशा के साथ मूल में प्रोजेक्ट करते हैं, उन्हें एक ही यूक्लिडियन वेक्टर के रूप में देखा जा सकता है।

इसका मतलब है कि निर्देशांक में समान अनुपात वाले सभी वैक्टर को समान माना जा सकता है:

गणितीय:

समानक

यानी हर affine वेक्टर को एक कैनन संस्करण में कम किया जा सकता है, जहां w = 1 (हम हर उस समतुल्य वेक्टर के बीच चयन करते हैं जिसे हम सबसे अच्छा पसंद करते हैं)।

नेत्रहीन (2 डी यूक्लिडियन - 3 डी एफाइन):

दृश्य तुल्यता

इसलिए "अनुमानित" स्थान का मतलब ; आपको ध्यान देना चाहिए कि यहाँ यूक्लिडियन स्थान 2D (सियान क्षेत्र) है

एक विशेष प्रकार के एफाइन वैक्टर होते हैं, जिन्हें उनके कैनोनिकल संस्करण (आसानी से) में नहीं रखा जा सकता है, जो कि (हाइपर) प्लेन w = 0 पर स्थित है।

हम इसे नेत्रहीन दिखा सकते हैं:

यहाँ छवि विवरण दर्ज करें

आप जो देखते हैं, वह यह है कि w -> 0 तब यूक्लिडियन अंतरिक्ष में अनुमानित वेक्टर अनंत में जाता है, लेकिन एक विशेष दिशा में अनंत तक जाता है ।

अब यह स्पष्ट है कि प्रोजेक्टिव स्पेस में दो वैक्टर को जोड़ने पर समस्याएँ पैदा हो सकती हैं जब आप यूक्लिडियन स्पेस में अनुमानित वेक्टर के रूप में योग पर विचार करते हैं, यह कहता है क्योंकि आप एफिन घटक को एफिन स्पेस में योग करेंगे और फिर उन्हें प्रोजेक्ट करेंगे। यूक्लिडियन (हाइपर) प्लेन।

यही कारण है कि आप केवल "अंक" को "वैक्टर" के लिए जोड़ सकते हैं क्योंकि "वेक्टर" "बिंदु" के w समन्वय को नहीं बदलेगा। यह केवल "बिंदुओं" के लिए सत्य है जहां w = 1:

यहाँ छवि विवरण दर्ज करें

जैसा कि आप देखते हैं कि हरे रंग का बिंदु वह है जो दो एफाइन वैक्टर को जोड़ने वाला है जो सियान "बिंदु" और V "वेक्टर" का प्रतिनिधित्व करता है , लेकिन यदि आप कैनन के एक से भिन्न रूप में प्रत्येक affine वेक्टर में V को लागू करते हैं, तो आप प्राप्त करेंगे एक गलत परिणाम (लाल "" बिंदु "")।

आप देखते हैं कि यूक्लिडियन स्पेसेस पर ऑपरेशन का वर्णन करने के लिए Affine Space का उपयोग पारदर्शी रूप से नहीं किया जा सकता है और शब्द "वेक्टर" के दुरुपयोग का अर्थ है, केवल कैनन प्रॉजेक्ट वेक्टर्स पर गणना योगों की (सख्त) बाधा ।

कहा कि, यह सोचना काफी उचित है कि GPU यह मानता है कि एक वेक्टर 4 में w = 0 या w = 1 है, जब तक कि आप वास्तव में नहीं जानते कि आप क्या कर रहे हैं।


इस प्रश्न का एक उत्तर चुनना बहुत कठिन था, क्योंकि सभी ने यह समझने में योगदान दिया है कि चौथे घटक के संबंध का उपयोग कैसे किया जाता है और इसकी आवश्यकता क्यों है। यूक्लिडियन और एफाइन स्पेस की आपकी व्याख्या बहुत सहायक है, मैं निश्चित रूप से इसे समझ नहीं पाया हूं क्योंकि मैं अब इस स्तर के विस्तार के बिना करता हूं। आपका बहुत बहुत धन्यवाद!
sebf

एक अच्छी व्याख्या (और आरेख के!) के लिए +1। हालाँकि, affine space और projective space एक ही चीज़ नहीं है ( affine space की विकिपीडिया परिभाषा देखें )। शायद यह कहने का एक अच्छा तरीका है: प्रक्षेप्य 3-स्थान और चक्कर 3-स्थान दोनों को R ^ 4 में एम्बेड किया जा सकता है, लेकिन एम्बेडिंग पूरी तरह से व्यंजन नहीं हैं। W = 0 के रूप में चक्कर स्थान से वैक्टर को एन्कोडिंग करना संभव और उपयोगी है, लेकिन प्रोजेक्ट के दृष्टिकोण से सार्थक नहीं है। इसी तरह, प्रक्षेपी निर्देश (अनन्तता पर बिंदु) दृश्य दृष्टिकोण से सार्थक नहीं हैं।
नाथन रीड

1

एक सदिश मान लें (x, y, z, w)। इस वेक्टर में 4 घटक x (स्पेस में x निर्देशांक), y (y निर्देशांक इन स्पेस), z (z कोऑर्डिनेट इन स्पेस) और दिलचस्प और रहस्यमय w घटक है। वास्तव में अधिकांश 3 डी गेम 4d space में संचालित होते हैं। इसे 4d सजातीय स्थान भी कहा जाता है। इसके कुछ स्पष्ट लाभ हैं ->

1> यह हमें अनुवाद के मैट्रिक्स के संयोजन में और एक में रोटेशन करने में मदद करता है। लेकिन क्या आप सोच रहे होंगे कि इसका उपयोग क्या है हम सिर्फ अनुवाद और रोटेशन मैट्रिक्स को गुणा कर सकते हैं और यह है, लेकिन इसके लिए अधिक नहीं है। अगर हमारे पास ऐसा नहीं है हमारे सभी वैक्टरों में w घटक तब होता है जब हम 3 डी वेक्टर (xyz) को अनुवाद और रोटेशन के संयुक्त मैट्रिक्स में गुणा करते हैं जिस तरह से हम अनजाने में x, y या z के साथ मानों को मापेंगे (यह है कि मैट्रिक्स गुणन कैसे संचालित होता है) और यह होगा संभवतः स्केलिंग के कारण स्थिति मैट्रिक्स (संयुक्त मैट्रिक्स का अनुवाद भाग) को दूषित करते हैं। इस समस्या को सही करने के लिए 4th घटक वेक्टर पेश किया गया है और वेक्टर का यह घटक (w) 99% मामलों में मूल्य 1.0 धारण करेगा। यह 4 घटक हमें अनुमति देता है असंबंधित स्थिति मान (अनुवाद) के लिए। मैट्रिक्स का प्रतिनिधित्व इस प्रकार है->

 [x y z w] [rx1 rx2 rx3 1]
           [ry1 ry2 ry3 1]
           [rz1 rz2 rz3 1]
           [px  py  pz  1]

और फिर हमारे पास सरल अभी तक शक्तिशाली मैट्रिक्स है। :)

2> हम z वैल्यू को पर्सपेक्टिव प्रोजेक्शन स्टेज में w कंपोनेंट में कॉपी करते हैं और x, y को इसके साथ विभाजित करते हैं। इस तरह से ऑब्जेक्ट्स स्क्रीन से दूर जाते ही छोटे हो जाते हैं।


धन्यवाद! मैं 3 डी अंतरिक्ष में किसी इकाई के किसी भी उपयोगी प्रतिनिधित्व में चौथे घटक का उपयोग करने की आवश्यकता को अधिक से अधिक देख रहा हूं।
sebf
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.