क्लिपिंग करते समय कोने को कैसे प्रक्षेपित करें?
जब हम सजातीय क्लिप स्पेस में क्लिप करते हैं, तो हमें किनारे और क्लिप प्लेन के बीच चौराहे पर स्थित एक नया वर्टेक्स उत्पन्न करना होता है। हमें इस प्रकार से प्रक्षेप करना है$(x , y, z , w)$नई शीर्ष स्थिति उत्पन्न करने के लिए दोनों कोने की स्थिति। यह सब अच्छी तरह से और अच्छा लगता है, लेकिन क्या करना चाहिए जब प्रक्षेप के बाद उत्पन्न शीर्ष 0 से जाग गया हो?
यह काम नहीं करता क्योंकि डब्ल्यू-डिवाइड बिंदु को अनंत तक जाता है (विभाजन शून्य से)।
तो क्या मुझे यह सुनिश्चित करना चाहिए कि मैं कभी 0 (कैसे?) के साथ कोने उत्पन्न न करूं। या मैं बस शून्य w (कैसे?) से निपटना चाहिए?
आप कह सकते हैं कि यह स्थिति कभी नहीं होती है, लेकिन यह वास्तव में होता है, खासकर जब कोने के z उनके w पर सेट होते हैं, उदाहरण के लिए स्काईबॉक्स के लिए। इस मामले में, जब हम निकट विमान (क्लिप स्पेस में z = 0) के खिलाफ क्लिप करते हैं और स्थिति को प्रक्षेपित करते हैं, तो हम 0 के az के साथ समाप्त हो जाएंगे, लेकिन 0 से भी ...
जवाब
कैमरे के सामने पॉइंट्स हैं $w > 0$सख्ती से, परिभाषा से। मैं कहूंगा कि अगर क्लिपिंग आपको अंक दे रही है$w = 0$ तो कुछ गलत हो रहा है
बाएँ / दाएँ / शीर्ष / नीचे क्लिप विमानों पर विचार करें। कोई रास्ता नहीं है कि एक त्रिकोण दृश्यमान फ्रुम के भाग से, तक फैला हो सकता है$w = 0$ कैमरा प्लेन या उसके पीछे, बिना किसी फ्रस्टम साइड प्लेन के बाहर से पार करना - या फिर समीप प्लेन, जो कुछ सकारात्मक दूरी पर होता है $w_\text{near} > 0$।
आपने स्काईबॉक्स और सेटिंग का उल्लेख किया $z = w$शीर्ष shader आउटपुट में। इस तरह की ज्यामिति को समतल पक्ष के विमानों को पार करना चाहिए इससे पहले कि वह समीप के विमान तक पहुँच सके। (कैसे एक स्काईबॉक्स का हिस्सा केवल पास के विमान द्वारा कैमरे से बंद होने के लिए पर्याप्त रूप से मिल सकता है?) यदि आप इसे सभी फ्रुम विमानों के खिलाफ सही ढंग से क्लिप कर रहे हैं , तो आपको समाप्त होना चाहिए$w > 0$ अंतिम शीर्ष में।