2009-04-11 8 views
11

Después de hacer algunos cambios en mi aplicación, mis texturas ya no se muestran. Hasta ahora he verificado lo siguiente:¿Cuáles son los pasos habituales de solución de problemas para las texturas OpenGL que no se muestran?

  • La dirección de la cámara no ha cambiado.
  • Puedo ver los vectores (cuando se colorean en lugar de texturados).

¿Alguna sospecha habitual?

+0

¿No ves solo texturas, o también objetos cuando están texturizados? – dragonfly

+0

Hmm, bueno, sé que los objetos están allí como dije, pero no puedo estar seguro de que no desaparezcan de alguna manera (aunque eso es poco probable, ya que introducir el color es solo 1 cambio de código) ... –

+0

Así que ves objetos a pesar de que no tienen textura? P.ej. en algunos colores, pero sin texturas? – dragonfly

Respuesta

9

Es posible que desee comprobar lo siguiente:

  • glEnable(GL_TEXTURE_2D); presencia

  • glBindTexture(GL_TEXTURE_2D, texture[i]); y glBindTexture(GL_TEXTURE_2D, 0); cuando no es necesario textura más

+0

Aunque tuve ambas cosas, el problema aún no se resolvió. Después de hacer algunas refactorizaciones pesadas, comenzó a funcionar nuevamente. Sospecho que fue tal vez un problema de traducción, pero gracias por las sugerencias de todos modos; ¡He aceptado esta respuesta ya que tiene los votos a favor más elevados! :) –

+0

Tuve un problema con mis texturas, y al llamar 'glEnable (GL_TEXTURE_2D);' solucioné mi problema. Gracias. –

+0

En mi caso, 'glUseProgram (0)' resolvió el problema, porque en otro lugar de mi código olvidé restablecerlo. –

2

Un par de cosas mas para verificar:

  • glColorMaterial (...); Para asegurarse de que los colores no sobrescriban la textura
  • glEnable/glDisable (GL_LIGHTING); A veces, la iluminación puede eliminar la textura
  • glDisable (GL_BLEND); Asegúrese de no mezclar la textura
  • Asegúrese de que las coordenadas de la textura estén configuradas correctamente.
0

¿Tiene un glColor3ub (255,255,255) antes de hacer que su objeto texturizado ayude? Creo que el estado predeterminado de OpenGL multiplica el glColor actual por el texel entrante; un glColor3ub extraviado (0,0,0) hará que todas sus texturas se vean negras.

0

Supongo que tiene las operaciones imprescindibles implementadas como glEnable (GL_TEXTURE_2D) y la unión de texturas, ya que las texturas funcionaron bien antes y de repente simplemente no se muestran.

Si está haciendo código orientado a objetos, es posible que desee que la generación de texturas suceda cuando el subproceso que está haciendo el dibujo se instancia, es decir: evite hacerlo en constructores o una llamada proveniente de un constructor, esto Puede instanciar su objeto de textura antes de la ventana o la aplicación que va a usar está activada.

Lo que suelo hacer es crear una función Init manual de la creación de texturas que se llama en la función Init de la aplicación. Por lo tanto, garantizo que la Aplicación existe cuando ocurre la vinculación.

Más información aquí: http://www.opengl.org/wiki/Common_Mistakes#The_Object_Oriented_Language_Problem

1

Un problema común me encuentro de vez en cuando es

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST); 

pero se olvidó de suministrar mipmaps. Quickfix:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
+0

gracias por esto, salvó mi tocino con OpenGL 4.1+ – Cardano

0

Me tomó algo de tiempo para resolver esto ...

glMatrixMode(GL_TEXTURE); 
glLoadIdentity(); 
glDisable(GL_TEXTURE_GEN_S); 
glDisable(GL_TEXTURE_GEN_T); 
glDisable(GL_TEXTURE_GEN_R); 
glDisable(GL_TEXTURE_GEN_Q); 

También asegúrese de que para desenlazar sus cosas:

glBindBuffer(GL_ARRAY_BUFFER, 0); 
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); 
glBindVertexArray(0); 

Si utiliza un motor de terceros, que está optimizado, es probable que tenga una capa de "acceso directo del Estado" para OpenGL (no usar las funciones de consulta lentas de OpenGL). Si es así, no llame a OpenGL directamente, pero use las envolturas del motor. De lo contrario, su código no funcionará bien con el resto del código del motor.

Cuestiones relacionadas