नोट: मुझे पहले से ही एक उत्तर मिल गया है (जो मैं इस प्रश्न के बाद पोस्ट करूंगा) - मैं बस सोच रहा था कि क्या मैं इसे सही कर रहा था, या अगर कोई बेहतर तरीका है।
मैं OpenGL ES (JOGL) का उपयोग करके एक "2.5D" आइसोमेट्रिक गेम बना रहा हूं। "2.5 डी" से मेरा मतलब है कि दुनिया 3 डी है, लेकिन इसे 2 डी आइसोमेट्रिक टाइलों का उपयोग करके प्रदान किया गया है।
मुझे जो मूल समस्या हल करनी थी, वह यह थी कि मेरे बनावट को क्रम से (आगे से पीछे) प्रस्तुत करना था, ताकि उचित प्रभाव पैदा करने के लिए टाइल्स को ठीक से ओवरलैप किया जा सके। कुछ पढ़ने के बाद, मुझे जल्दी से एहसास हुआ कि यह "पुरानी टोपी" 2 डी दृष्टिकोण है। यह कुशलतापूर्वक करना मुश्किल हो गया, क्योंकि 3 डी दुनिया को खिलाड़ी द्वारा संशोधित किया जा सकता है (इसलिए सामान 3 डी अंतरिक्ष में कहीं भी दिखाई दे सकता है) - इसलिए यह तर्कसंगत लग रहा था कि मैं गहराई से बफर का लाभ उठाता हूं। इसका मतलब यह था कि मुझे सही क्रम में सामान प्रदान करने के बारे में चिंता करने की ज़रूरत नहीं थी।
हालांकि, मुझे एक समस्या का सामना करना पड़ा। यदि आप उपयोग करते हैं GL_DEPTH_TEST
और GL_BLEND
एक साथ, यह एक प्रभाव पैदा करता है जहां वस्तुओं को पृष्ठभूमि के साथ मिश्रित किया जाता है इससे पहले कि वे जेड ऑर्डर द्वारा "क्रमबद्ध" हों (जिसका अर्थ है कि आपको एक अजीब तरह का ओवरलैप मिलता है जहां पारदर्शिता होनी चाहिए)।
यहाँ कुछ छद्म कोड है जो समस्या का वर्णन करना चाहिए (संयोग से, मैं एंड्रॉइड के लिए libgdx का उपयोग कर रहा हूं)।
create() {
// ...
// some other code here
// ...
Gdx.gl.glEnable(GL10.GL_DEPTH_TEST);
Gdx.gl.glEnable(GL10.GL_BLEND);
}
render() {
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
Gdx.gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
// ...
// bind texture and create vertices
// ...
}
तो सवाल यह है: मैं पारदर्शिता ओवरलैप समस्या को कैसे हल करूं?