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);
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);
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
¿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. –
No. ¿Qué argumentos para glPixelStorei solucionarían este problema? –
[Ver aquí] (http://www.opengl.org/wiki/Common_Mistakes#Texture_upload_and_pixel_reads) - 'glPixelStorei (GL_UNPACK_ALIGNMENT, 1)' debería arreglarlo. –