在OpenGL 2.1+中,我们需要在使用纹理之前调用
glEnable(GL_TEXTURE)
吗?如果遇到纹理问题,可能的原因是什么?
更新:
我正在桌面上使用OpenGL 2.1,我的步骤如下:
Load bmp 24 bit image (I checked in gDebuger and it show my texture ok, so i'm sure my load image procedure not failed).
Call several OpenGL functions in
init()
procedude:glGenTextures(1, &texture_id); glBindTexture(GL_TEXTURE_2D, texture_id); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, image_width, image_height, 0, GL_BGR, GL_UNSIGNED_BYTE, image_data);
And in draw_scene():
glUseProgram(program); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, texture_id); glUniform1i(uniform_texture, 0); ...
Vertex shader (version 120):
attribute vec3 vPos; attribute vec2 vTexCoord; uniform mat4 MV; uniform mat4 Projection; varying vec2 fragTexCoord; void main() { fragTexCoord = vTexCoord; gl_Position = Projection * MV * vPos; }
Fragment shader:
uniform sampler2D my_texture; varying vec2 fragTexCoord; void main() { gl_FragColor = texture2D(my_texture, fragTexCoord); }
glEnable(GL_TEXTURE)
不会有任何作用。您能否给我们提供一个屏幕截图,或更详细地描述您输出的问题? - TheAmateurProgrammerinternalFormat
中GL_RGBA8
、GL_RGBA
等之间的不同吗?如果我在internalFormat
中使用了GL_RGB
,那么我是否可以在片段着色器中访问 alpha 元素,例如:texture2D(myTexture, texCoord).a
? - Bình Nguyên