In meinem Spiel gibt es ein Minecraft-ähnliches Terrain, das aus Würfeln besteht. Ich generiere einen Vertex-Puffer aus den Voxeldaten und verwende einen Texturatlas für das Aussehen verschiedener Blöcke:
Das Problem ist, dass die Textur entfernter Würfel mit benachbarten Kacheln im Texturatlas interpoliert. Dies führt zu falschen Farben zwischen den Würfeln (möglicherweise müssen Sie den Screenshot unten in voller Größe anzeigen, um die Grafikfehler zu erkennen):
Im GL_NEAREST
Moment verwende ich diese Interpolationseinstellungen, aber ich habe jede Kombination ausprobiert und auch ohne Mipmapping liefert es keine besseren Ergebnisse.
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);
Ich habe auch versucht, einen Versatz in den Texturkoordinaten hinzuzufügen, um einen etwas kleineren Bereich der Kachel auszuwählen, aber da der unerwünschte Effekt vom Abstand zur Kamera abhängt, kann dies das Problem nicht vollständig lösen. In weiten Entfernungen treten die Streifen trotzdem auf.
Wie kann ich diese Texturblutung lösen? Da die Verwendung eines Texturatlas eine beliebte Technik ist, gibt es möglicherweise einen gemeinsamen Ansatz. Leider kann ich aus Gründen, die in den Kommentaren erläutert wurden, nicht auf andere Texturen oder Texturarrays wechseln.
GL_LINEAR
, was ein ähnliches Ergebnis ergibt, oder es wird das nächste Pixel ausgewählt, GL_NEAREST
das ohnehin auch Streifen zwischen Blöcken ergibt. Die zuletzt genannte Option verringert den Pixelfehler, beseitigt ihn jedoch nicht.