理解纹理

时间:2017-08-06 09:18:03

标签: c++ opengl textures

让我们说三个不同的纹理对象,它们上面有不同的图像数据。这三个纹理对象都绑定到纹理单元0。

我的场景中有三个模型,每个都使用其中一个纹理。

在我的片段着色器中,我有一个sampler2D变量。并且所有模型都使用相同的着色器程序进行渲染。

现在我按顺序执行以下操作

  1. 绑定纹理对象1
  2. 渲染模型1

  3. 绑定纹理对象2

  4. 渲染模型2

  5. 绑定纹理对象3

  6. 渲染模型3
  7. 想要问的是,您使用不同纹理对不同模型进行纹理处理,并且片段着色器中的采样器是否从当前绑定的纹理中读取数据。如果纹理绑定到不同的纹理单元会发生什么,我是否需要不同的采样器。

1 个答案:

答案 0 :(得分:2)

采样器始终从设置为的纹理单元的当前绑定纹理中读取。由于默认的活动纹理单元是单位0,并且采样器的默认值也是0,因此除非更改采样器或活动纹理单元,否则代码应该有效。

如果将纹理绑定到另一个纹理单元,则必须确保活动纹理单元(glActiveTexture)与为采样器设置的值(glUniform1i)匹配。如果绑定,例如,纹理为GL_TEXTURE2,则必须将采样器设置为glUniform1i(sampler_location, 2)