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.
- Gunakan tekstur array alih-alih atlas tekstur. Tekstur array terdiri dari tumpukan gambar 2D dengan ukuran yang sama, dan Anda menentukan koordinat ketiga untuk memilih satu; itu dimaksudkan persis sebagai pengganti tekstur atlas tanpa masalah penyaringan. Namun, tekstur array adalah fitur yang lebih baru mungkin tidak tersedia dalam versi OpenGL yang Anda gunakan.
- Hasilkan batas 1-piksel di setiap ubin tekstur Anda, yang mereplikasi warna piksel biasa yang berdekatan. (Ini pada dasarnya menerapkan ulang GL's
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.
- Sangat sedikit inset koordinat tekstur Anda, sehingga mereka tidak pergi jauh ke tepi ubin tekstur. Melakukan ini terlalu banyak akan menyebabkan ketipisan tepi tekstur yang terlihat dibandingkan dengan piksel di tengah.
- Gunakan tekstur tunggal per jenis ubin. Ini membebankan biaya pengalihan 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 ubin x=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:
- Pastikan Anda tidak (bahkan secara tidak langsung) komputasi
index*size + size
, tetapi hanya (index+1)*size
.
- Pastikan aritmatika Anda tepat; cara termudah untuk melakukan ini adalah dengan membuat ukuran ubin Anda tepat 1,0, yang akan menghasilkan aritmatika integer yang tepat bahkan jika Anda melakukan perhitungan dengan float 32-bit (toh, hingga 16 juta blok dari asalnya, toh).
- Gunakan bilangan bulat aktual untuk perhitungan koordinat titik; ini membuat Anda semakin jangkauan.