En mi juego hay un terreno similar a Minecraft hecho de cubos. Genero un búfer de vértices a partir de los datos de vóxel y uso un atlas de texturas para la apariencia de diferentes bloques:
El problema es que la textura de cubos distantes se interpola con mosaicos adyacentes en el atlas de texturas. Eso da como resultado líneas de colores incorrectos entre los cubos (es posible que deba ver la captura de pantalla a continuación en su tamaño completo para ver los defectos gráficos):
Por ahora uso esta configuración de interpolación, pero probé todas las combinaciones e incluso GL_NEAREST
sin mipmapping no proporciona mejores resultados.
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);
También intenté agregar un desplazamiento en las coordenadas de textura para elegir un área ligeramente más pequeña del mosaico, pero dado que el efecto no deseado depende de la distancia a la cámara, esto no puede resolver el problema por completo. A grandes distancias, las rayas ocurren de todos modos.
¿Cómo puedo resolver este sangrado de textura? Dado que el uso de un atlas de texturas es una técnica popular, puede haber un enfoque común. Lamentablemente, por algunas razones explicadas en los comentarios, no puedo cambiar a diferentes texturas o matrices de texturas.
GL_LINEAR
que da un resultado similar, o seleccionará el píxel más cercano GL_NEAREST
que, de todos modos, también dará lugar a franjas entre bloques. La última opción mencionada disminuye pero no elimina la falla de píxeles.