OpenGL中glActiveTexture和GL_TEXTURE0的功能是什么?
我正在寻找一种方法来理解为什么需要OpenGL中glActiveTexture和GL_TEXTURE0的功能是什么?,opengl,opengl-es,Opengl,Opengl Es,我正在寻找一种方法来理解为什么需要glActiveTexture。我的代码如下: glGenTextures(1, &textureId); glBindTexture(GL_TEXTURE_2D, textureId); 如果我想象GL_TEXTURE\u 2D是挂在墙上的图片框架,而textureId是真实图片,那么glBindTexture是将真实图片分配给框架的唯一命令,那么GL_TEXTURE0和glActiveTexture是什么 下面的代码可以正常工作吗 glActive
glActiveTexture
。我的代码如下:
glGenTextures(1, &textureId);
glBindTexture(GL_TEXTURE_2D, textureId);
如果我想象GL_TEXTURE\u 2D
是挂在墙上的图片框架,而textureId
是真实图片,那么glBindTexture
是将真实图片分配给框架的唯一命令,那么GL_TEXTURE0
和glActiveTexture
是什么
下面的代码可以正常工作吗
glActiveTexture(GL_TEXTURE0);
glGenTextures(1, &textureId);
glBindTexture(GL_TEXTURE_2D, textureId);
glActiveTexture(GL_TEXTURE1);
glTexImage2D(GL_TEXTURE_2D, .....)
glTexParameteri(GL_TEXTURE_2D, ...)
我目前正在使用OpenGL2.1
如果我想象GL_TEXTURE_2D是挂在墙上的画框,textureId是真实的图片
其实是一个很好的比喻:)
那么,什么是GL_TEXTURE0和glActiveTexture
想象一下有多个画框的墙,第一个画框被标记为GL_TEXTURE0,第二个画框被标记为GL_TEXTURE1,依此类推。OpenGL在某个点引入了多纹理(基本上是在一个几何体过程中使用多个纹理);为了让旧代码继续工作,他们不能只向所有函数添加额外的参数。这就是为什么您必须明确指定要寻址的纹理单元。因此,在设置纹理(
glTexParrameteri
,glTexImage2D
,…)时,我们是否需要调用glActiveTexture
,因为在glTexImage2D中没有参数来说明您是在谈论GL_TEXTURE0还是GL_TEXTURE1。@datenwolf:还有一个问题:D:如果我在片段着色器中使用多个纹理(即uniform sampler2D tex1;uniform sampler2D tex2;…
那么我如何称呼glActiveTexture
?@BìnhNguyên:您使用glActiveTexture单元将“图像”放入它们的“单元”帧GL\u TEXTURE0+n
,在着色器中,您将采样器设置为仅值n
。是的,这是不一致的,但谁在乎呢?只需将GL\u TEXTURE0+
放入glactivateTexture
的所有调用中,这没什么大不了的。那么,我们需要调用glEnable(GL\u TEXTURE\u 2D)
还是glEnable(GLìu纹理_立方体_贴图)
,在新OpenGL版本(2.1+)中使用它们之前?嗯,是的,因为每个纹理单元可以是以前版本中的任何类型。@BìnhNguyên:只有在使用固定函数管道的情况下。如果使用着色器,纹理采样的使用由着色器程序决定。