【发布时间】:2015-10-09 10:19:05
【问题描述】:
在 OpenGL 2.1+ 中,我们需要在使用纹理之前调用glEnable(GL_TEXTURE) 吗?如果我们遇到纹理问题,可能是什么原因?
更新:
我正在使用 OpenGL 2.1 for Desktop,我的步骤是:
加载 bmp 24 位图像(我检查了 gDebuger,它显示我的纹理正常,所以我确定我的加载图像过程没有失败)。
-
在
init()过程中调用几个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)会做什么。你能给我们一张你得到的截图,或者更详细地描述你的输出问题吗? -
我认为我的一些参数错误,我已经清除并重写了所有纹理代码,现在它可以工作了!谁能解释一下
GL_RGBA8、GL_RGBA、...在internalFormat中有什么不同?如果我在internalFormat中使用了GL_RGB,那么我可以在片段着色器中访问alpha 元素,例如:texture2D(myTexture, texCoord).a?