दर्शनीय सतह का पता लगाने
जब हम गैर-पारदर्शी वस्तुओं और सतहों वाली तस्वीर देखते हैं, तो हम उन वस्तुओं को नहीं देख सकते हैं जो आंखों के करीब की वस्तुओं से पीछे हैं। यथार्थवादी स्क्रीन छवि प्राप्त करने के लिए हमें इन छिपी हुई सतहों को हटाना होगा। इन सतहों की पहचान और हटाने को कहा जाता हैHidden-surface problem।
छिपी हुई सतह की समस्याओं को दूर करने के लिए दो दृष्टिकोण हैं - Object-Space method तथा Image-space method। ऑब्जेक्ट-स्पेस विधि भौतिक समन्वय प्रणाली में लागू की जाती है और स्क्रीन-समन्वय प्रणाली में छवि-अंतरिक्ष विधि लागू की जाती है।
जब हम 2 डी स्क्रीन पर 3 डी ऑब्जेक्ट प्रदर्शित करना चाहते हैं, तो हमें स्क्रीन के उन हिस्सों की पहचान करने की आवश्यकता होती है जो एक चुने हुए देखने की स्थिति से दिखाई देते हैं।
गहराई बफर (जेड-बफर) विधि
यह विधि कटमुल द्वारा विकसित की गई है। यह एक छवि-स्थान दृष्टिकोण है। मूल विचार निकटतम (दृश्य) सतह को निर्धारित करने के लिए प्रत्येक सतह की जेड-गहराई का परीक्षण करना है।
इस पद्धति में प्रत्येक सतह को अलग-अलग एक पिक्सेल स्थिति में सतह पर एक समय में संसाधित किया जाता है। एक पिक्सेल के लिए गहराई के मूल्यों की तुलना की जाती है और निकटतम (सबसे छोटी z) सतह फ्रेम बफर में प्रदर्शित होने वाले रंग को निर्धारित करती है।
यह बहुभुज की सतहों पर बहुत कुशलता से लगाया जाता है। किसी भी क्रम में सतहों को संसाधित किया जा सकता है। दूर के लोगों से करीब बहुभुज को ओवरराइड करने के लिए, दो बफ़र्स नाम दिएframe buffer तथा depth buffer, उपयोग किया जाता है।
Depth buffer (x, y) स्थिति के लिए गहराई मानों को संग्रहीत करने के लिए उपयोग किया जाता है, क्योंकि सतहों को संसाधित किया जाता है (0 store गहराई। 1)।
frame buffer प्रत्येक स्थान (x, y) पर रंग मान के तीव्रता मान को संग्रहीत करने के लिए उपयोग किया जाता है।
जेड-निर्देशांक आमतौर पर सीमा के लिए सामान्यीकृत होते हैं [0, 1]। Z-निर्देशांक के लिए 0 मान वापस क्लिपिंग फलक को इंगित करता है और z-निर्देशांक के लिए 1 मान फ्रंट क्लिपिंग फलक को इंगित करता है।
कलन विधि
Step-1 - बफर मान सेट करें -
डेफ्थबफ़र (x, y) = 0
फ़्रेमबफ़र (x, y) = पृष्ठभूमि का रंग
Step-2 - प्रत्येक बहुभुज पर प्रक्रिया करें (एक समय में एक)
बहुभुज के प्रत्येक अनुमानित (x, y) पिक्सेल स्थिति के लिए, गहराई z की गणना करें।
यदि Z> डेप्थबफ़र (x, y)
कंप्यूट रंग,
सेट डेपबफ़र (x, y) = z,
फ्रेमबफ़र (x, y) = सरफेसर (x, y)
लाभ
- इसे लागू करना आसान है।
- यह हार्डवेयर में कार्यान्वित होने पर गति की समस्या को कम करता है।
- यह एक बार में एक वस्तु को संसाधित करता है।
नुकसान
- इसके लिए बड़ी मेमोरी की जरूरत होती है।
- यह समय लेने वाली प्रक्रिया है।
स्कैन-लाइन विधि
यह दृश्य सतह की पहचान करने के लिए एक छवि-स्थान विधि है। इस पद्धति में केवल एक स्कैन-लाइन के लिए एक गहन जानकारी है। गहराई मानों की एक स्कैन-लाइन की आवश्यकता के लिए, हमें अगली स्कैन-लाइन को संसाधित करने से पहले एक ही समय में किसी दिए गए स्कैन-लाइन को प्रतिच्छेद करने वाले सभी बहुभुजों को समूह और संसाधित करना होगा। दो महत्वपूर्ण टेबल,edge table तथा polygon table, इसके लिए बनाए रखा जाता है।
The Edge Table - इसमें दृश्य में प्रत्येक पंक्ति के समन्वित अंत बिंदु, प्रत्येक पंक्ति के व्युत्क्रम ढलान, और किनारों को सतहों से जोड़ने के लिए बहुभुज तालिका में बिंदु होते हैं।
The Polygon Table - इसमें समतल गुणांक, सतह सामग्री गुण, अन्य सतह डेटा शामिल हैं, और एज टेबल के लिए संकेत हो सकते हैं।
किसी दिए गए स्कैन-लाइन को पार करने वाली सतहों की खोज को सुविधाजनक बनाने के लिए, किनारों की एक सक्रिय सूची बनाई जाती है। सक्रिय सूची केवल उन किनारों को संग्रहीत करती है जो बढ़ते हुए क्रम में स्कैन-लाइन को पार करते हैं। प्रत्येक सतह के लिए एक ध्वज भी निर्धारित किया जाता है ताकि यह पता चल सके कि स्कैन-लाइन के साथ स्थिति सतह के अंदर या बाहर है या नहीं।
प्रत्येक स्कैन-लाइन पर पिक्सेल स्थिति को बाएं से दाएं संसाधित किया जाता है। एक सतह के साथ बाएं चौराहे पर, सतह के झंडे को चालू किया जाता है और दाईं ओर, ध्वज को बंद कर दिया जाता है। आपको केवल गहराई की गणना करने की आवश्यकता होती है जब कई सतहों पर उनके झंडे एक निश्चित स्कैन-लाइन स्थिति में चालू होते हैं।
क्षेत्र-उपखंड विधि
क्षेत्र-उपखंड विधि उन दृश्य क्षेत्रों का पता लगाकर लाभ उठाती है जो एकल सतह के हिस्से का प्रतिनिधित्व करते हैं। कुल देखने के क्षेत्र को छोटे और छोटे आयतों में विभाजित करें जब तक कि प्रत्येक छोटा क्षेत्र एक एकल दृश्य सतह या बिल्कुल सतह का हिस्सा न हो।
इस प्रक्रिया को तब तक जारी रखें जब तक कि उपखंडों को एक सतह से संबंधित आसानी से विश्लेषण नहीं किया जाता है या जब तक वे एक एकल पिक्सेल के आकार तक कम नहीं हो जाते हैं। ऐसा करने का एक आसान तरीका यह है कि प्रत्येक चरण में क्षेत्र को चार बराबर भागों में क्रमिक रूप से विभाजित किया जाए। चार संभावित रिश्ते हैं जो एक सतह एक निर्दिष्ट क्षेत्र सीमा के साथ हो सकते हैं।
Surrounding surface - एक जो क्षेत्र को पूरी तरह से घेरता है।
Overlapping surface - एक जो आंशिक रूप से अंदर और आंशिक रूप से क्षेत्र के बाहर है।
Inside surface - एक जो पूरी तरह से क्षेत्र के अंदर है।
Outside surface - एक जो पूरी तरह से क्षेत्र के बाहर है।
एक क्षेत्र के भीतर सतह दृश्यता का निर्धारण करने के लिए परीक्षण इन चार वर्गीकरणों के संदर्भ में कहा जा सकता है। यदि निम्नलिखित में से कोई एक स्थिति सत्य है, तो निर्दिष्ट क्षेत्र के किसी भी उपखंड की आवश्यकता नहीं है -
- सभी सतहों क्षेत्र के संबंध में बाहरी सतह हैं।
- केवल एक अंदर, अतिव्यापी या आसपास की सतह क्षेत्र में है।
- एक आसपास की सतह क्षेत्र की सीमाओं के भीतर अन्य सभी सतहों को अस्पष्ट करती है।
बैक-फेस डिटेक्शन
पॉलीहेड्रोन के पीछे के चेहरों की पहचान के लिए एक तेज़ और सरल ऑब्जेक्ट-स्पेस विधि "अंदर-बाहर" परीक्षणों पर आधारित है। एक बिंदु (x, y, z) विमान के मापदंडों A, B, C, और D के साथ एक बहुभुज सतह "अंदर" है यदि अंदर की ओर सतह पर दृष्टि की रेखा के साथ है, तो बहुभुज का पिछला चेहरा होना चाहिए ( हम उस चेहरे के अंदर हैं और अपने सामने की स्थिति से इसे नहीं देख सकते हैं)।
हम सामान्य वेक्टर पर विचार करके इस परीक्षण को सरल बना सकते हैं N एक बहुभुज सतह पर, जिसमें कार्टेशियन घटक (ए, बी, सी) हैं।
सामान्य तौर पर, यदि V आंख (या "कैमरा") स्थिति से देखने की दिशा में एक वेक्टर है, तो यह बहुभुज एक पिछला चेहरा है यदि
V.N > 0
इसके अलावा, यदि वस्तु विवरण प्रक्षेपण निर्देशांक में परिवर्तित हो जाते हैं और आपकी देखने की दिशा देखने वाले अक्ष के समानांतर होती है, तो -
V = (0, 0, V z ) और V.N = V Z C
ताकि हमें केवल सामान्य वेक्टर के घटक सी के संकेत पर विचार करने की आवश्यकता हो N।
नकारात्मक $ Z_ {V} $ अक्ष के साथ देखने की दिशा के साथ एक दाहिने हाथ में देखने की प्रणाली में, बहुभुज एक पिछला चेहरा है यदि C <0. 0. इसके अलावा, हम ऐसा कोई भी चेहरा नहीं देख सकते हैं जिसका सामान्य z घटक C = 0 हो, क्योंकि आपके देखने की दिशा उस बहुभुज की ओर है। इस प्रकार, सामान्य तौर पर, हम किसी भी बहुभुज को पीछे के चेहरे के रूप में लेबल कर सकते हैं यदि उसके सामान्य वेक्टर में एज़ घटक मूल्य है -
C <= 0
इसी तरह के तरीकों का उपयोग उन पैकेजों में किया जा सकता है जो बाएं हाथ के देखने की प्रणाली को रोजगार देते हैं। इन पैकेजों में, विमान मापदंडों ए, बी, सी और डी की गणना एक दक्षिणावर्त दिशा में निर्दिष्ट बहुभुज शीर्ष निर्देशांक से की जा सकती है (दाएं हाथ के सिस्टम में उपयोग की गई वामावर्त दिशा के विपरीत)।
इसके अलावा, बैक फेस में सामान्य वैक्टर होते हैं जो देखने की स्थिति से दूर होते हैं और C> = 0 द्वारा पहचाने जाते हैं जब देखने की दिशा सकारात्मक $ Z_ {v} $ अक्ष के साथ होती है। किसी ऑब्जेक्ट को परिभाषित करने वाले विभिन्न विमानों के लिए पैरामीटर सी की जांच करके, हम तुरंत सभी बैक फेस की पहचान कर सकते हैं।
A- बफर विधि
ए-बफर विधि गहराई-बफर विधि का विस्तार है। ए-बफर विधि एक दृश्यता का पता लगाने की विधि है, जो लुकस फिल्म स्टूडियो में रेंडरिंग सिस्टम रेंडर एवरीथिंग यू एवर सॉ (REYES) के लिए विकसित की गई है।
पारदर्शिता की अनुमति देने के लिए गहराई बफर विधि पर ए-बफर का विस्तार होता है। ए-बफर में प्रमुख डेटा संरचना संचय बफर है।
ए-बफर में प्रत्येक स्थिति के दो क्षेत्र हैं -
Depth field - यह एक सकारात्मक या नकारात्मक वास्तविक संख्या को संग्रहीत करता है
Intensity field - यह सतह-तीव्रता की जानकारी या एक पॉइंटर मूल्य को संग्रहीत करता है
यदि गहराई> = 0, तो उस स्थिति में संग्रहीत संख्या एक ही सतह की गहराई है जो संबंधित पिक्सेल क्षेत्र को ओवरलैप कर रही है। तीव्रता क्षेत्र तब सतह के रंग के आरजीबी घटकों को उस बिंदु और पिक्सेल कवरेज के प्रतिशत में संग्रहीत करता है।
यदि गहराई <0, यह पिक्सेल की तीव्रता के लिए कई-सतह योगदान को इंगित करता है। इंटेंसिटी फ़ील्ड एक पॉइंटर को सतह डेटा की लिंक की गई सूची में संग्रहीत करता है। A- बफर में सतह बफर में शामिल हैं -
- RGB तीव्रता घटक
- अपारदर्शिता व्यास
- Depth
- क्षेत्र कवरेज का प्रतिशत
- भूतल पहचानकर्ता
एल्गोरिथ्म गहराई बफर एल्गोरिथ्म की तरह ही आगे बढ़ता है। गहराई और अस्पष्टता मानों का उपयोग पिक्सेल के अंतिम रंग को निर्धारित करने के लिए किया जाता है।
गहराई छँटाई विधि
गहराई सॉर्टिंग विधि छवि स्थान और ऑब्जेक्ट-स्पेस ऑपरेशन दोनों का उपयोग करती है। गहराई-छँटाई विधि दो बुनियादी कार्य करता है -
सबसे पहले, गहराई कम करने के क्रम में सतहों को क्रमबद्ध किया जाता है।
दूसरा, सतहें सबसे बड़ी गहराई की सतह से शुरू होकर क्रम में स्कैन की जाती हैं।
बहुभुज सतहों का स्कैन रूपांतरण छवि स्थान में किया जाता है। छिपी-सतह की समस्या को हल करने के लिए इस विधि को अक्सर कहा जाता हैpainter's algorithm। निम्नलिखित आंकड़ा गहराई छँटाई के प्रभाव को दर्शाता है -
एल्गोरिथ्म गहराई से छंटाई से शुरू होता है। उदाहरण के लिए, बहुभुज के प्रारंभिक "गहराई" अनुमान को बहुभुज के किसी भी शीर्ष के निकटतम z मान लिया जा सकता है।
आइए सूची के अंत में बहुभुज P लें। उन सभी बहुभुजों पर विचार करें, जिनकी z- extents P के ओवरलैप हैं। पी खींचने से पहले, हम निम्नलिखित परीक्षण करते हैं। यदि निम्न में से कोई भी परीक्षण सकारात्मक है, तो हम मान सकते हैं कि P को Q से पहले खींचा जा सकता है।
- क्या एक्स-एक्सेंट्स ओवरलैप नहीं होते हैं?
- क्या y-extents ओवरलैप नहीं हैं?
- क्या P पूरी तरह से Q के विमान के विपरीत दिशा से है?
- क्या Q पूरी तरह से P के विमान के दृष्टिकोण के समान है?
- क्या बहुभुज के अनुमान ओवरलैप नहीं होते हैं?
यदि सभी परीक्षण विफल हो जाते हैं, तो हम दूसरे के विमान का उपयोग करके या तो पी या क्यू को विभाजित करते हैं। नए कट पॉलीगॉन को गहराई क्रम में डाला जा रहा है और यह प्रक्रिया जारी है। सैद्धांतिक रूप से, यह विभाजन ओ (एन 2 ) व्यक्तिगत बहुभुज उत्पन्न कर सकता है , लेकिन व्यवहार में, बहुभुज की संख्या बहुत कम है।
बाइनरी स्पेस पार्टिशन (बीएसपी) पेड़
दृश्यता की गणना के लिए बाइनरी स्पेस विभाजन का उपयोग किया जाता है। बीएसपी के पेड़ बनाने के लिए, बहुभुज से शुरू होना चाहिए और सभी किनारों को लेबल करना चाहिए। एक समय में केवल एक किनारे के साथ काम करते हुए, प्रत्येक किनारे का विस्तार करें ताकि यह दो में विमान को विभाजित करे। पहले किनारे को जड़ के रूप में पेड़ में रखें। अंदर या बाहर के आधार पर बाद के किनारों को जोड़ें। किनारे पर पहले से मौजूद एक किनारे का विस्तार करने वाले किनारों को दो में विभाजित किया जाता है और दोनों को पेड़ में जोड़ा जाता है।
उपरोक्त आकृति से, पहले लें A एक जड़ के रूप में।
आकृति (ए) में सभी नोड्स की एक सूची बनाएं।
सभी नोड्स को जड़ के सामने रखें A नोड के बाईं ओर A और उन सभी नोड्स को रखो जो रूट के पीछे हैं A दाईं ओर जैसा कि चित्र (b) में दिखाया गया है।
पहले सभी नोड्स को प्रोसेस करें और फिर सबसे पीछे वाले नोड्स को।
जैसा कि आकृति (ग) में दिखाया गया है, हम पहले नोड को संसाधित करेंगे B। जैसे कि नोड के सामने कुछ भी नहीं हैB, हमने NIL डाल दिया है। हालाँकि, हमारे पास नोड हैC नोड के पीछे B, इसलिए नोड C नोड के दाईं ओर जाएगा B।
नोड के लिए एक ही प्रक्रिया को दोहराएं D।