2012-06-06 18 views
5

Aquí hay una textura primitiva de 5x2, definida en los formatos RGB y RGBA.Extraño cambio de color después de cargar una textura GL_RGB

//      1    2    3      4    5 
unsigned char rgb[] = { 0, 0, 0,  0, 0, 0,  200, 200, 200,  0, 0, 0,  200, 200, 200, 
         0, 0, 0,  0, 0, 0,  200, 200, 200,  0, 0, 0,  200, 200, 200,  }; 
unsigned char rgba[] = { 0, 0, 0, 255, 0, 0, 0, 255, 200, 200, 200, 255, 0, 0, 0, 255, 200, 200, 200, 255, 
         0, 0, 0, 255, 0, 0, 0, 255, 200, 200, 200, 255, 0, 0, 0, 255, 200, 200, 200, 255, }; 

Cargando la versión RGBA funciona como se espera:

glTexImage2D(GL_TEXTURE_2D, 
      0,  // mipmap level 
      GL_RGB, // dest format 
      5,  // width 
      2,  // height 
      0,  // deprecated 
      GL_RGBA, // source format 
      GL_UNSIGNED_BYTE, 
      rgba); 

enter image description here

Cargando los resultados textura RGB en un cambio de color raro:

glTexImage2D(GL_TEXTURE_2D, 
      0,  // mipmap level 
      GL_RGB, // dest format 
      5,  // width 
      2,  // height 
      0,  // deprecated 
      GL_RGB, // source format 
      GL_UNSIGNED_BYTE, 
      rgb); 

enter image description here

La diferencia en el código entre la primera y la segunda captura de pantalla son solo esos dos argumentos para glTexImage2D.

¿Qué estoy haciendo mal?

Medio Ambiente

  • ATI Radeon HD5450, OpenGL 4.2
  • Windows 7, 64 bits
  • Visual Studio 2010
+1

¿Ha establecido la alineación del paquete? El valor predeterminado es de 4 bytes, por lo que la matriz rgba estará bien, pero no funcionará con la matriz rgb. –

+0

No. ¿Qué argumentos para glPixelStorei solucionarían este problema? –

+3

[Ver aquí] (http://www.opengl.org/wiki/Common_Mistakes#Texture_upload_and_pixel_reads) - 'glPixelStorei (GL_UNPACK_ALIGNMENT, 1)' debería arreglarlo. –

Respuesta

10

See here - glPixelStorei(GL_UNPACK_ALIGNMENT, 1) debe solucionarlo.

Cuestiones relacionadas