En un juego similar a Minecraft que estoy haciendo, obtengo bordes blancos en mis cubos:
Es mucho más notable en texturas más oscuras. Las texturas se configuran así:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
¿Alguna ayuda?
Respuestas:
Hay dos causas posibles para este tipo de problema, dependiendo exactamente de qué problema se trata. Voy a enumerar ambos:
1. Usted está viendo otros colores de su textura a lo largo de los bordes de las baldosas.
Esto me parece el problema en este caso, porque todos los píxeles del borde son uno de los tres colores que son plausiblemente en su textura: blanco, negro y marrón.
Si está utilizando múltiples imágenes de mosaico una al lado de la otra en una sola textura (un atlas de texturas), como supongo que está haciendo, esto es inevitable. Ocurre porque la GPU no combina perfectamente la interpolación a lo largo del borde de un triángulo con la interpolación a lo largo de la textura, y se obtienen pequeños fragmentos de la textura adyacente.
Hay varias cosas que puedes hacer.
CLAMP[_TO_EDGE]
, pero de una manera que tiene en cuenta los atlas de texturas; su uso de los mismos no tiene ningún efecto porque la mayoría de los bordes de su mosaico no están en el borde de la textura). Esta es la solución que uso en mi propia entrada en el género, cubos . No conozco ninguna desventaja particular, excepto que usa más memoria de textura.2. Estás viendo a través de los espacios entre las fichas.
No creo que este sea el problema en este caso, ya que no se ve un terreno verde a través de los huecos, pero lo estoy incluyendo por completo.
Esto puede ocurrir cuando no proporciona exactamente las mismas coordenadas para los vértices de los bordes de reunión de los mosaicos adyacentes, lo que generalmente surge debido a un error de punto flotante. Por ejemplo, si tiene mosaicos de tamaño 0.6 y calcula el borde derecho del mosaico en
x=100
con(100*0.6) + 0.6
, y el borde izquierdo del mosaico enx=101
con(100*0.6)
, no obtendrá la misma respuesta exacta, y la diferencia puede ser visible como pequeñas manchas de brechas.La solución es asegurar que su aritmética sea consistente; Algunas formas de hacer esto son:
index*size + size
, sino solo(index+1)*size
.fuente