2012-07-06 11 views
6

OpenGL ES 2.0 tiene problemas graves de precisión al muestreo de textura - he visto temas con un similar problem, pero no he visto una solución real a este "distorsionada OpenGL ES 2.0 textura " problema todavía.OpenGL ES 2.0 textura distorsión en gran GL_REPEAT geometría

Esto no está relacionado con el formato de imagen de la textura o los búferes de color OpenGL, parece que es un error de precisión. No sé qué causa específicamente la falla de la precisión: no parece que sea solo el tamaño de la geometría el que causa esta distorsión, porque simplemente escalar la posición de los vértices pasado al sombreador de vértices no resuelve el problema.


Éstos son algunos ejemplos de la distorsión de la textura:

El problema de la textura está limitado a la geometría de pequeña escala en OpenGL ES 2.0; de lo contrario, el muestreo de textura parece normal, pero el efecto granular empeora gradualmente a medida que los datos de los vértices son del origen de XYZ (0,0,0)

Estos problemas de textura no ocurre en el escritorio OpenGL (funciona bien en Windows XP, Windows 7 y Mac OS X)

Solo he visto el problema en Android, iPhone o WebGL (que es similar a OpenGL ES 2.0)


Todas las texturas son potencia de 2 pero el problema todavía ocurre

  • Escalado los datos de vértice - Los valores de ubicación XYZ de un vértice están en el rango de: -65536 a +65536 punto flotante

    • Me di cuenta de que esto era grande, así que traté de dividir el vert ex posiciones de 1024 para reducir el tamaño de la geometría y es de esperar obtener coma flotante de precisión más exacta, pero esto no se soluciona el problema o disminuir la textura de la distorsión
  • Escala de la modelview o escalando la matriz de proyección no ayuda

  • Cambio de filtrado de texturas opciones no ayuda

    • Desactivación mipmapping, o el uso de GL_NEAREST/GL_LINEAR no hace nada
    • Activación/anisotrópico incapacitante no hace nada
    • El efecto de bandas persiste incluso cuando se utiliza GL_CLAMP
  • Dividiendo las coordenadas de textura pasados ​​al vertex shader y luego multiplicando de nuevo a los valores correctos en el fragment shader, tampoco funciona

  • precisión highp sampler2D, flotador highp, highp int - en el fragmento o el vertex shader no cambia nada (lowp/mediump no lo hizo wo rk bien)

Estoy pensando en este problema tiene que haber sido resuelto en un momento dado - Al ver que OpenGL ES 2.0 basada en los juegos han sido capaces de rendir a gran escala, la geometría muy detallada

Respuesta

1

Este es el problema habitual de atlas de textura. No hay configuración para limitar la interpolación lineal en la mitad de la textura. Así es como funciona el hardware.

Puede solucionar el problema utilizando más cercana de la textura de búsqueda de filtro en un fragmento de programa que calcula la consulta de la textura modulo su tamaño y posición de textura y hace su filtrado lineal manualmente.

+0

He estado tratando de resolver un error que creo que es similar a éste, y pasó a la casualidad sobre esta cuestión ... iba a su trabajo de la técnica para la clasificación de este problema también? http://stackoverflow.com/questions/13915531/repeating-opengl-es-texture-bound-to-hills-in-cocos2d-2-0 Cualquier ayuda se agradece enormemente! – simonthumper

Cuestiones relacionadas