2012-01-06 11 views
15

पर्यावरण में पारदर्शी बनावट व्यवहार: वेबजीएल, क्रोम। मॉडल के लिए बनावट के रूप में पारदर्शी पीएनजी का उपयोग करते समय मेरे पास निम्न व्यवहार है:वेबजीएल

  1. छवि ए - पेड़ इसके पीछे की इमारत को छुपाता है और मुझे विश्व बॉक्स बनावट दिखाई देती है। यह भी अपने आप में खाल (वापस शाखाओं दिखाई नहीं देते हैं)
  2. एक ही समय में - छवि बी - ठीक से काम करता है, खिड़की से पारदर्शी है और मैं देख रहा हूँ क्या पीछे

एक है: Tree over house बी: Window transparency

दोनों स्क्रीनशॉट एक ही समय में अलग-अलग कैमरे की स्थिति से दृश्य पर बने थे। बनावट एक ही एल्गोरिदम द्वारा उत्पादित की जाती है।

मुझे समझ में नहीं आता कि खिड़की और शाखा पारदर्शिता के बीच क्या अंतर है। मेरा मुख्य सवाल यह है कि - शाखाओं को कैसे ठीक किया जाए ताकि उनके पीछे वस्तुओं को छिपाना न पड़े? शेडर कोड है:

gl_FragColor = vec4(textureColor.rgb * vLightWeighting, textureColor.a); 

मैं अक्षम सम्मिश्रण और depth_test सक्षम/के साथ खेला जाता है, कभी कभी वांछित परिणाम प्राप्त करने के लिए, लेकिन यकीन नहीं अगर यह काम करने के लिए उचित तरीका है।

उत्तर

28

आप गहराई बफर मुद्दों में भाग रहे हैं, इसका आपके शेडर या मिश्रण मोड से कोई लेना देना नहीं है।

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

यह ऐसा कुछ है जो यहां तक ​​कि बड़े वाणिज्यिक गेम इंजन भी कुछ डिग्री के साथ संघर्ष करते हैं, इसलिए कुछ भ्रम पैदा करने के बारे में बुरा मत मानना। :)

कोई "सही समाधान" इस समस्या का है, लेकिन क्या यह वास्तव में करने पर निर्भर करता तो की तरह अपने दृश्य की संरचना करने के प्रयास कर रहा है:

  1. किसी भी अपारदर्शी ज्यामिति राज्य के अनुसार क्रमबद्ध प्रस्तुत (शेडर/बनावट/आदि)
  2. अगला पारदर्शी ज्यामिति प्रस्तुत करें। यदि संभव हो तो गहराई से इन्हें क्रमबद्ध करें, ताकि आप सबसे पहले कैमरे से सबसे दूर खींच सकें।
बस उस पारदर्शी हैं ज्यामिति के टुकड़े पर चिह्नित करने और बाकी सब कुछ के बाद उन्हें प्रतिपादन आप इस समस्या का 90% का समाधान करेंगे द्वारा

, लेकिन समस्या अभी भी पारदर्शी वस्तु ओवरलैपिंग के लिए रह सकती है। यह आपके दृश्य के आधार पर आपके लिए कोई मुद्दा नहीं हो सकता है, लेकिन यदि यह अभी भी कलाकृतियों का कारण बन रहा है तो आपको आकर्षित करने से पहले पारदर्शी वस्तुओं को गहराई से क्रमबद्ध करने की आवश्यकता होगी।

+0

स्पष्ट उत्तर के लिए धन्यवाद। मैं आवश्यक क्रम में प्रस्तुत कर सकते हैं। केवल तब शेष समस्या - आत्म-ओवरलैप। उदाहरण में वृक्ष सामने की शाखाओं को "छुपाता है"। मान लीजिए कि सामान्य तरीकों से हल करना असंभव है। उचित क्रम में प्रतिपादन करके कम से कम 9 0% समस्याएं हल हो जाती हैं। – Vecnas

+0

@ टोजी क्या वस्तुओं को गहराई से क्रमबद्ध करने के लिए एक अच्छा तरीका है? Greeings – schlenger

3

अल्फा से कम के साथ टुकड़े को छोड़ दें, उदाहरण के लिए 0.5 मदद कर सकता है (बेशक, दुष्प्रभाव है)।

यदि (gl_FragColor.a < 0।5) त्यागें;

AlphaFunctions in WebGL?

+0

कृपया कोड भी जोड़ें। –

संबंधित मुद्दे