Dalam game seperti minecraft yang saya buat, saya mendapatkan tepi putih di kubus saya:
Ini jauh lebih terlihat dalam tekstur yang lebih gelap. Tekstur sedang diatur seperti ini:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
Ada bantuan?
Jawaban:
Ada dua kemungkinan penyebab untuk jenis masalah ini, tergantung pada masalah yang sebenarnya. Saya akan daftar keduanya:
1. Anda melihat warna lain dari tekstur Anda di sepanjang tepi ubin.
Bagi saya ini adalah masalah dalam kasus ini, karena semua piksel tepi adalah salah satu dari tiga warna yang masuk akal dalam tekstur Anda: putih, hitam, dan cokelat.
Jika Anda menggunakan beberapa gambar ubin tepat di sebelah satu sama lain dalam satu tekstur (atlas tekstur), seperti yang saya asumsikan sedang Anda lakukan, ini tidak bisa dihindari. Ini terjadi karena GPU tidak cocok dengan interpolasi di sepanjang tepi segitiga dengan interpolasi di sepanjang tekstur, dan Anda mendapatkan potongan kecil dari tekstur yang berdekatan.
Ada beberapa hal yang dapat Anda lakukan.
CLAMP[_TO_EDGE]
, tetapi dengan cara yang menyadari tekstur atlas - penggunaannya tidak berpengaruh karena sebagian besar tepi ubin Anda tidak di tepi tekstur.) Ini adalah solusi yang saya gunakan dalam entri saya sendiri dalam genre, Cubes . Saya tahu tidak ada kerugian tertentu kecuali bahwa ia menggunakan lebih banyak memori tekstur.2. Anda melihat celah di antara ubin.
Saya tidak berpikir ini adalah masalah dalam hal ini, karena tidak ada lahan hijau yang terlihat melalui celah, tapi saya memasukkannya untuk kelengkapan.
Ini dapat terjadi ketika Anda tidak memberikan koordinat yang persis sama untuk simpul tepi pertemuan ubin yang berdekatan, yang biasanya muncul karena kesalahan titik-mengambang. Misalnya, jika Anda memiliki ubin dengan ukuran 0,6 dan menghitung tepi kanan ubin
x=100
dengan(100*0.6) + 0.6
, dan tepi kiri ubinx=101
dengan(100*0.6)
, Anda tidak akan mendapatkan jawaban yang sama persis, dan perbedaannya dapat dilihat sebagai bintik kecil dari kesenjangan.Solusinya adalah untuk memastikan bahwa aritmatika Anda konsisten; beberapa cara untuk melakukan ini adalah:
index*size + size
, tetapi hanya(index+1)*size
.sumber