Catatan: Saya sudah menemukan jawaban (yang akan saya posting setelah pertanyaan ini) - Saya hanya ingin tahu apakah saya melakukannya dengan benar, atau apakah ada cara yang lebih baik.
Saya membuat game isometrik "2.5D" menggunakan OpenGL ES (JOGL). Dengan "2.5D", maksud saya bahwa dunia adalah 3D, tetapi diterjemahkan menggunakan ubin isometrik 2D.
Masalah asli yang harus saya selesaikan adalah bahwa tekstur saya harus dirender agar (dari belakang ke depan), sehingga ubin tumpang tindih dengan benar untuk menciptakan efek yang tepat. Setelah membaca, saya segera menyadari bahwa ini adalah pendekatan 2D "topi tua". Ini menjadi sulit dilakukan secara efisien, karena dunia 3D dapat dimodifikasi oleh pemain (sehingga barang dapat muncul di mana saja dalam ruang 3D) - jadi sepertinya logis bahwa saya memanfaatkan kedalaman penyangga. Ini berarti bahwa saya tidak perlu khawatir tentang membuat barang-barang dalam urutan yang benar.
Namun, saya menghadapi masalah. Jika Anda menggunakan GL_DEPTH_TEST
dan GL_BLEND
bersama - sama, itu menciptakan efek di mana objek dicampur dengan latar belakang sebelum mereka "diurutkan" berdasarkan urutan z (artinya Anda mendapatkan semacam tumpang tindih yang aneh di mana transparansi seharusnya).
Berikut adalah beberapa kode semu yang seharusnya menggambarkan masalah (kebetulan, saya menggunakan libgdx untuk Android).
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
// ...
}
Jadi pertanyaannya adalah: Bagaimana cara saya mengatasi masalah transparansi yang tumpang tindih?