Decal कार्यान्वयन


11

मेरे पास decals के बारे में जानकारी खोजने के मुद्दे थे, इसलिए शायद यह सवाल दूसरों की मदद करेगा। कार्यान्वयन एक फॉरवर्ड रेंडरर के लिए है।

क्या कोई पुष्टि कर सकता है कि क्या मुझे सही क्रियान्वयन मिला है?

  • आप किसी भी आयाम की एक घन को परिभाषित करते हैं जो सामान्य स्थान में प्रक्षेपण की मात्रा को परिभाषित करेगा। आप त्रिकोण को हटाने के लिए परिभाषित क्यूब के साथ त्रिकोण चौराहे की जांच करते हैं कि प्रक्षेपण प्रभावित होगा।
  • आप इन त्रिकोणों को क्लिप करते हैं और उन्हें बचाते हैं।
  • फिर आप सहेजे गए त्रिकोणों के लिए यूवी निर्देशांक की गणना करने के लिए मैट्रिक्स ट्रिक्स का उपयोग करते हैं जो आपके द्वारा पेश किए जा रहे बनावट को संदर्भित करेंगे।
  • ऐसा करने के लिए आप क्यूब की ऊंचाई, चौड़ाई और गहराई का प्रतिनिधित्व करने वाले वैक्टरों को सामान्य स्थान पर ले जाते हैं, ताकि फ़े बायीं ओर नीचे कोने की उत्पत्ति हो।
  • आपने i, j, k यूनिट वैक्टर के रूप में एक मैट्रिक्स में, क्यूब के लिए अनुवाद सेट किया है, फिर आप इस मैट्रिक्स को उलटा करते हैं।
  • आप इस मैट्रिक्स द्वारा सहेजे गए त्रिभुजों के शीर्षों को गुणा करते हैं, इस तरह से आप 0 से 1 आकार के क्यूब के अंदर उनके निर्देशांक प्राप्त करते हैं जो आप यूवी निर्देशांक के रूप में उपयोग करते हैं।
  • इस तरह आपके पास मूल त्रिकोण हैं जिन पर आप प्रोजेक्ट कर रहे हैं और आपके पास उनके लिए यूवी निर्देशांक हैं (यूवी निर्देशांक उस बनावट को संदर्भित कर रहे हैं जिसे आप प्रोजेक्ट कर रहे हैं)।
  • फिर आप दृश्य पर सहेजे गए त्रिकोण को फिर से जोड़ते हैं और वे अनुमानित छवि के साथ प्रक्षेपण के क्षेत्र को ओवरराइट करते हैं।

अब जिन सवालों के जवाब मुझे नहीं मिले। क्या अंतिम बिंदु सही है? मैंने सॉफ्टवेयर क्लिपिंग कभी नहीं की है, लेकिन यह लगता है कि त्रुटि सीमित होने के कारण पर्याप्त रूप से त्रुटि हुई है, कि अनुमानित बनावट के लिए कुछ लड़ना होगा। इसके अलावा यूवी निर्देशांक प्राप्त करने का तरीका सही है?


यहाँ लिंक के साथ एक लिंक दिया गया है: gamedev.stackexchange.com/questions/24653/…
लुइस एस्ट्राडा

जवाबों:


5

इस लेख पर एक नज़र डालें:

http://blog.wolfire.com/2009/06/how-to-project-decals/

ऐसा लगता है कि वह आपके द्वारा उपयोग किए जा रहे सटीक दृष्टिकोण का उपयोग कर रहा है। वह z- लड़ाई के बारे में बात नहीं करता है, लेकिन यह निश्चित रूप से बड़ी दूरी पर एक मुद्दा बन सकता है।

मेरा सुझाव एक निश्चित दूरी के बाद decals को निष्क्रिय करना होगा अगर z- लड़ाई बहुत दिखाई देती है।


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

1
जब decals ड्राइंग करते हैं, तो आप हमेशा गहराई बफर तुलना फ़ंक्शन को कम-से-या-बराबर के बजाय सेट कर सकते हैं, ताकि कम decals हमेशा सतह के शीर्ष पर खींचे जाते हैं जो वे प्रभावित कर रहे हैं।
jmegaffin

1

जेड फाइटिंग को हल करने के लिए मैंने जो किया, वह एक छोटे से राशि के वर्टेक्स के Z मान को अपने डिक्लेयर शेडर में टक्कर देने के बाद था, क्योंकि यह स्क्रीन निर्देशांक में था।

ठीक है ..... मैं फिट जाली का उपयोग करता हूं। मैं इलाके में Y के साथ बैठकर एक जाल nxn बनाता हूं। मैं इलाके के बहुभुज जाल पर वाई को खोजने के लिए कोड का उपयोग करता हूं। सभी परिवर्तनों के बाद, मैं स्क्रीन निर्देशांक में मौजूदा ज्यामिति के शीर्ष पर आ रहा हूँ। डेप्थ बफर स्क्रीन कॉर्डिनेट्स में होता है इसलिए डील्स के जेड को स्क्रीन की तरफ थोड़ा सा हिलाकर पॉलीगोन करता है, इससे जेड फाइटिंग रुक जाती है। ऐसा करने से मैंने पॉलीगनों की मात्रा कम कर दी, जिससे मेरी फिटेड डेसल्स की मात्रा आधी हो गई। यह पुराना 120 कोड है

 vec4 v = gl_ModelViewProjectionMatrix * gl_Vertex;
 v.z -= .03;
 gl_Position = v;

आशा है कि यह इसे बेहतर तरीके से बताता है .. (अनुरोध के रूप में)

सभी तार फ्रेम।

तार इलाके ही।


1
यह उत्तर विशेष रूप से छोटा और अनिर्दिष्ट लगता है। क्या आप अपना उत्तर स्पष्ट कर सकते हैं?
गनमलॉक

1
यह समझने में मुश्किल नहीं है .. मैं स्क्रीन स्पेस में Z निर्देशन में सिर्फ एक बिट द्वारा शीर्ष को स्थानांतरित करता हूं। क्योंकि OpenGL में आप हमेशा स्क्रीन स्पेस में पॉजिटिव Z देख रहे होते हैं, Z नेगेटिव को थोड़ी मात्रा में ले जाने पर Z फाइटिंग को ठीक करता है। हालाँकि इसके साथ एक समस्या है .. जैसा कि आप ज़ूम आउट करते हैं, z डीक्ल को ज़रूरत से ज़्यादा स्थानांतरित कर सकता है .. एक फिक्स है आंख के द्वारा शिफ्ट राशि को स्केल दूरी पर स्केल करना।
माइक ओ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.