5
在使用纹理之前,我们需要在OpenGL 2.1+中调用glEnable(GL_TEXTURE)
吗?如果我们遇到质感问题,可能是什么原因?在OpenGL 2.1中使用纹理之前是否需要调用glEnable(GL_TEXTURE)?
更新:
我使用OpenGL 2.1桌面,我的步骤是:
负载BMP 24位图像(我在gDebuger检查,它显示我的质地好了,我确定我的加载镜像过程没有失败)。在
init()
procedude调用几个OpenGL函数:
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);
而且在draw_scene():
glUseProgram(program); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, texture_id); glUniform1i(uniform_texture, 0); ...
顶点着色器(版本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; }
片段着色器:
uniform sampler2D my_texture; varying vec2 fragTexCoord; void main() { gl_FragColor = texture2D(my_texture, fragTexCoord); }
如果你使用着色器,那么我怀疑'glEnable(GL_TEXTURE)'做了什么。你能给我们一个截图吗?或者更详细地描述你的输出问题? – TheAmateurProgrammer
我认为我的一些参数错误,我已清除并重写所有纹理代码,现在它工作!任何人都可以解释我在'internalFormat'中的'GL_RGBA8','GL_RGBA',...有什么不同?如果我在'internalFormat'中使用'GL_RGB',那么我可以像片段着色器那样访问alpha元素:'texture2D(myTexture,texCoord).a'? –