理解纹理

问题描述:

比方说,我有三个不同的纹理对象与他们不同的图像数据。这三个纹理对象都绑定到纹理单元0.理解纹理

我在场景中有三种模型,每种都使用这些纹理之一。

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

现在我做在序列以下操作

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

  3. 绑定纹理对象2

  4. 渲染模型2

  5. 绑定纹理对象3

  6. 渲染模型3

有什么想问的是这一点,你纹理不同质地不同型号的方式,确实在片段着色器取样器读取当前绑定的纹理数据。如果纹理绑定到不同的纹理单元会发生什么,我需要一个不同的采样器。

采样器总是从当前绑定的纹理读取它所设置的纹理单元。由于默认的活动纹理单位是单位0,并且采样器的默认值也是0,所以您的代码应该工作,除非您更改采样器或活动纹理单位。

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