Tam olarak hangi soruna bağlı olarak, bu tür bir sorunun iki olası nedeni vardır. Her ikisini de listeleyeceğim:
1. Karo kenarları boyunca dokudan diğer renkleri görüyorsunuz.
Bu bana bu durumda sorun gibi görünüyor, çünkü tüm kenar pikselleri dokunuzda makul bir şekilde bulunan üç renkten biri: beyaz, siyah ve kahverengi.
Tek bir dokuda (doku atlası) yan yana birden fazla döşeme görüntüsü kullanıyorsanız, yaptığınızı varsaydığım gibi, bu kaçınılmazdır. GPU, bir üçgenin kenarı boyunca enterpolasyonu doku boyunca enterpolasyonla mükemmel bir şekilde eşleştirmediği ve bitişik dokunun küçük bitlerini aldığınız için oluşur.
Yapabileceğiniz birkaç şey var.
- Bir kullan dizi doku bir doku atlas yerine. Dizi dokusu, aynı boyutta 2B görüntülerden oluşur ve birini seçmek için üçüncü bir koordinat belirtirsiniz; filtreleme problemi olmadan doku atlaslarının yerine geçmesi amaçlanmıştır. Ancak, dizi dokuları kullandığınız OpenGL sürümünde bulunmayan daha yeni bir özelliktir.
- Doku döşemelerinizin her birinde, bitişik normal pikselin rengini çoğaltan 1 piksellik bir kenarlık oluşturun. (Bu aslında GL'leri yeniden uyguluyor
CLAMP[_TO_EDGE]
, ancak doku atlaslarının farkında olan bir şekilde - kullanımınızın bir etkisi yoktur çünkü kiremit kenarlarınızın çoğu dokunun kenarında değildir.) Bu benim kendi girişimde kullandığım çözüm. tür, Küpler . Daha fazla doku belleği kullanması dışında belirli bir dezavantajı bilmiyorum.
- Doku koordinatlarınızı çok hafifçe yerleştirin, böylece doku döşemesinin kenarına kadar gitmezler. Bunu çok fazla yapmak, ortadaki piksellere kıyasla dokunun kenarlarında belirgin bir inceliğe yol açacaktır.
- Döşeme türü başına tek bir doku kullanın. Bu, doku değiştirme maliyetlerini da beraberinde getirir.
2. Fayanslar arasındaki boşlukları görüyorsunuz.
Bu durumda bu sorun olduğunu düşünmüyorum, çünkü boşluklar arasında yeşil bir zemin görülmüyor, ancak bunu tamlık için dahil ediyorum.
Bu, genellikle kayan nokta hatası nedeniyle ortaya çıkan bitişik döşemelerin toplantı kenarlarının köşeleri için tam olarak aynı koordinatları sağlamadığınız zaman ortaya çıkabilir . Örneğin, büyüklüğü 0.6 fayans varsa ve en karo sağ kenarını hesaplamak x=100
ile (100*0.6) + 0.6
ve en karo sol kenarı x=101
ile (100*0.6)
, tam aynı cevabı almazsınız ve fark küçük lekeler halinde görünür olabilir boşluklar.
Çözüm, aritmetiğin tutarlı olmasını sağlamaktır; bunu yapmanın bazı yolları:
- (Dolaylı olarak bile) bilgisayar olmadığınızdan
index*size + size
, yalnızca(index+1)*size
.
- Aritmetiğinizin kesin olduğundan emin olun; Bunu yapmanın en kolay yolu, karo boyutunuzu tam olarak 1.0 yapmaktır, bu da 32 bit şamandıralarla (başlangıçta 16 milyon bloğa kadar) hesaplamalarınızı yapsanız bile tamsayı aritmetiği ile sonuçlanır.
- Tepe koordinat hesaplamaları için gerçek tamsayıları kullanın; bu size daha da fazla menzil sunar.