【问题标题】:What is the function of glActiveTexture and GL_TEXTURE0 in OpenGL?OpenGL中glActiveTexture和GL_TEXTURE0的作用是什么?
【发布时间】:2013-01-09 08:52:52
【问题描述】:

我正在寻找一种方法来理解为什么需要glActiveTexture。我有以下代码:

glGenTextures(1, &textureId);
glBindTexture(GL_TEXTURE_2D, textureId);

如果我想象GL_TEXTURE_2D 是挂在墙上的相框,textureId 是真实图片,那么glBindTexture 是唯一将真实图片分配给相框的命令,那么,@ 是什么? 987654326@和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。

【问题讨论】:

    标签: opengl opengl-es


    【解决方案1】:

    如果我想象GL_TEXTURE_2D是挂在墙上的画框,textureId是真实的图片,

    其实是一个很好的比喻:)

    那么,GL_TEXTURE0 和 glActiveTexture 是什么?

    想象一堵墙有多个相框,第一帧标记为 GL_TEXTURE0,第二帧标记为 GL_TEXTURE1,依此类推。

    【讨论】:

    • 那么,在设置纹理时(glTexParrameteri, glTexImage2D, ...)我们需要调用glActiveTexture吗?
    • 是的,因为 glTexImage2D 中没有参数来说明您是在谈论 GL_TEXTURE0 还是 GL_TEXTURE1。
    • @datenwolf:还有一个问题:D:如果我在片段着色器中使用多个纹理(IE uniform sampler2D tex1; uniform sampler2D tex2; ... 那么我怎么称呼glActiveTexture
    • @BìnhNguyên:您使用 glActiveTexture 单元将“图像”放入其“单元”框架GL_TEXTURE0 + n,并在着色器中将采样器设置为值n。是的,这是不一致的,但谁在乎呢?只需将GL_TEXTURE0+ 放入glActiveTexture 的所有调用中,这没什么大不了的。
    【解决方案2】:

    OpenGL 在某些时候引入了多重纹理(基本上在一个几何通道上使用多个纹理);为了保持旧代码正常工作,他们不能只为所有函数添加额外的参数。这就是为什么您必须明确指定要处理的纹理单元的原因。

    【讨论】:

    • 那么,在新的 OpenGL 版本 (2.1+) 中使用它们之前,我们是否需要调用 glEnable(GL_TEXTURE_2D)glEnable(GL_TEXTURE_CUBE_MAP), ...?
    • 嗯,是的,因为每个纹理单元都可以是以前版本中的任何类型。
    • @BìnhNguyên:仅当您使用固定功能管道时。如果您使用着色器,则纹理采样的使用由着色器程序决定。
    猜你喜欢
    • 2020-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-25
    • 1970-01-01
    • 2015-05-07
    • 2012-05-18
    • 1970-01-01
    相关资源
    最近更新 更多