W mojej grze jest teren podobny do Minecrafta wykonany z kostek. Generuję bufor wierzchołków na podstawie danych wokseli i używam atlasu tekstur dla wyglądu różnych bloków:
Problem polega na tym, że tekstura odległych kostek interpoluje z sąsiadującymi płytkami w atlasie tekstur. Powoduje to powstawanie linii niewłaściwych kolorów między sześcianami (może być konieczne wyświetlenie poniższego zrzutu ekranu w pełnym rozmiarze, aby zobaczyć wady graficzne):
Na razie korzystam z tych ustawień interpolacji, ale wypróbowałem każdą kombinację, a nawet GL_NEAREST
bez mipmapy nie daje lepszych wyników.
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
Próbowałem także dodać przesunięcie we współrzędnych tekstury, aby wybrać nieco mniejszy obszar płytki, ale ponieważ niepożądany efekt zależy od odległości do kamery, nie może to całkowicie rozwiązać problemu. I tak na dalekie odległości pojawiają się paski.
Jak mogę rozwiązać problem krwawienia z tekstury? Ponieważ korzystanie z atlasu tekstur jest popularną techniką, może istnieć wspólne podejście. Niestety, z kilku powodów wyjaśnionych w komentarzach, nie mogę przejść na inne tekstury lub tablice tekstur.
GL_LINEAR
co daje podobny wynik, lub wybiera najbliższy piksel, GL_NEAREST
który i tak skutkuje pasami między blokami. Ostatnia wspomniana opcja zmniejsza się, ale nie eliminuje wady pikseli.