加载了 SOIL 的 OpenGL jpg 图像倾斜显示
OpenGL jpg image loaded with SOIL is displayed slanted
使用SOIL加载jpg图片时,图片显示倾斜,颜色不对(我不知道怎么形容,因为是彩色的,但看起来是黑白的)
预期版本
然而,它是这样显示的
着色器是:
顶点着色器
#version 330 core
layout (location = 0) in vec3 position;
layout (location = 1) in vec3 color;
layout (location = 2) in vec2 texCoord;
out vec3 ourColor;
out vec2 TexCoord;
void main(){
gl_Position = vec4(position, 1.0f);
ourColor = color;
TexCoord = texCoord;
}
片段着色器
#version 330 core
in vec3 ourColor;
in vec2 TexCoord;
out vec4 color;
uniform sampler2D ourTexture;
void main(){
color = texture(ourTexture, TexCoord);
}
如何正确显示,预期的方式?
默认情况下,OpenGL 假定图像的每一行的开头与 4 个字节对齐。这是因为GL_UNPACK_ALIGNMENT
参数默认为4,如果图片格式为RGB,且width*3不能被4整除,则必须先更改参数再指定二维纹理图像(glTexImage2D
):
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
使用SOIL加载jpg图片时,图片显示倾斜,颜色不对(我不知道怎么形容,因为是彩色的,但看起来是黑白的)
预期版本
然而,它是这样显示的
着色器是:
顶点着色器
#version 330 core
layout (location = 0) in vec3 position;
layout (location = 1) in vec3 color;
layout (location = 2) in vec2 texCoord;
out vec3 ourColor;
out vec2 TexCoord;
void main(){
gl_Position = vec4(position, 1.0f);
ourColor = color;
TexCoord = texCoord;
}
片段着色器
#version 330 core
in vec3 ourColor;
in vec2 TexCoord;
out vec4 color;
uniform sampler2D ourTexture;
void main(){
color = texture(ourTexture, TexCoord);
}
如何正确显示,预期的方式?
默认情况下,OpenGL 假定图像的每一行的开头与 4 个字节对齐。这是因为GL_UNPACK_ALIGNMENT
参数默认为4,如果图片格式为RGB,且width*3不能被4整除,则必须先更改参数再指定二维纹理图像(glTexImage2D
):
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);