ऐपल की हिडन लाइन रिमूवल अल्गोरिदम के लिए समोच्च लाइनें कैसे खोजें


10

मज़े के लिए मैं डीसीपीयू -16 के लिए एक वायर-फ्रेम दर्शक बनाने की कोशिश कर रहा हूं । मैं समझता हूं कि तार फ्रेम में छिपी लाइनों को कैसे छिपाया जाए इसके अलावा सब कुछ कैसे करते हैं। SO पर यहां सभी प्रश्न सभी मानते हैं कि आपके पास OpenGL तक पहुंच है, दुर्भाग्य से मेरे पास DCPU-16 (या किसी भी प्रकार का हार्डवेयर त्वरण) जैसी किसी भी चीज की पहुंच नहीं है।

मुझे Google Books पर Appel के एल्गोरिथ्म का काफी अच्छा वर्णन मिला । हालांकि एक समस्या यह है कि मुझे इसका पता लगाने में परेशानी हो रही है।

Appel ने समोच्च रेखा को एक सामने-सामने और एक बैक-फेसिंग बहुभुज द्वारा साझा किए गए किनारे के रूप में परिभाषित किया है, या एक सामने वाले बहुभुज के बिना किनारे का किनारा जो एक बंद पॉलीहेड्रॉन का हिस्सा नहीं है। दो सामने वाले बहुभुजों द्वारा साझा की गई बढ़त दृश्यता में कोई बदलाव नहीं करती है और इसलिए यह समोच्च रेखा नहीं है। अंजीर। 8.4 में, किनारों AB, EF, PC, GK और CH समोच्च रेखाएँ हैं, जबकि किनारों ED, DC और GI नहीं हैं।

चित्र 8.4

मैं एल्गोरिथ्म के नियमों को समझता हूं और आपके समोच्च रेखाओं के होने के बाद यह कैसे काम करता है, हालांकि मुझे समझ में नहीं आता है कि यह निर्धारित करने के लिए मुझे क्या करने की आवश्यकता है कि क्या एक किनारे " सामने वाले और एक पीछे वाले बहुभुज द्वारा साझा किया गया है, या एक सामने वाले बहुभुज का अनसेकेडेड किनारे जो एक बंद पॉलीहेड्रॉन का हिस्सा नहीं है "कोडिंग दृष्टिकोण से"। मैं एक आकृति देख सकता हूं और मुझे पता चल सकता है कि मेरे सिर में कौन सी रेखाएं समोच्च रेखाएं हैं लेकिन मुझे इस बात का कोई सुराग नहीं है कि कोडित एल्गोरिथ्म में उस "समझ" को कैसे स्थानांतरित किया जाए।


अपडेट करें

मैंने समोच्च रेखाओं के निर्धारण में कुछ प्रगति की है। मुझे कंप्यूटर ग्राफिक्स पर यूनिवर्सिटी ऑफ़ बफ़ेलो क्लास के ये दो लेक्चर नोट्स मिले।

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

किनारों पर विचार करें। ये तीन श्रेणियों में आते हैं।

  1. दो अदृश्य चेहरों में शामिल होने वाला एक किनारा स्वयं अदृश्य है। इसे सूची से हटा दिया जाएगा और अनदेखा कर दिया जाएगा।
  2. दो संभावित-दृश्यमान चेहरों को मिलाने वाली बढ़त को 'मटेरियल एज' कहा जाता है और इसके लिए आगे की प्रक्रिया की आवश्यकता होगी।
  3. संभावित रूप से दिखाई देने वाले चेहरे और अदृश्य चेहरे से जुड़ने वाला एक किनारा 'मटेरियल एज' का एक विशेष मामला है और इसे 'कंट्रास्ट एज' भी कहा जाता है।

उपरोक्त दो सूचनाओं का उपयोग करके मैं इसे कोड के रूप में लिखने में सक्षम होने में सक्षम हूं, लेकिन मुझे अभी भी एक लंबा रास्ता तय करना है।



1
त्रिकोण के सामान्य की गणना करने पर इस उत्तर की जांच करें । लाइन-ऑफ़-विज़न वेक्टर के साथ सामान्य वेक्टर का डॉट उत्पाद निर्धारित करता है कि क्या कोई त्रिभुज सामने की ओर है।

जवाबों:


3

धारण करने के लिए "-फेसिंग" नियम के लिए, आपको यह सुनिश्चित करना चाहिए कि सभी चेहरे ठीक से उन्मुख हों। उदाहरण के लिए, दाएं हाथ के नियम का उपयोग करें, इसका मतलब है कि चेहरे के शीर्ष को इस तरह से गिना जाना चाहिए कि चेहरे के विमान में एक सकारात्मक घुमाव पॉलीहेड्रॉन के बाहर एक सामान्य इंगित से मेल खाती है। (समझे?) या अधिक सरलता से, हर चेहरे को अपने बाहरी-सामान्य की ओर इशारा करना चाहिए।

डैंग्लिंग चेहरे, यानी एक बंद पॉलीहेड्रॉन से संबंधित नहीं होने को एक अनिर्धारित अभिविन्यास के रूप में देखा जा सकता है।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.