纹理的理解
Understanding of textures
假设我有三个不同的纹理对象,上面有不同的图像数据。这三个纹理对象都绑定到纹理单元0.
我的场景中有三个模型,每个模型都使用其中一种纹理。
在我的片段着色器中,我有一个 sampler2D 变量。并且所有模型都使用相同的着色器程序进行渲染。
现在我依次进行以下操作
- 绑定纹理对象 1
渲染模型 1
绑定纹理对象2
渲染模型 2
绑定纹理对象3
- 渲染模型 3
想问的是,你用不同的纹理对不同的模型进行纹理处理,片段着色器中的采样器是否从当前绑定的纹理中读取数据。如果纹理绑定到不同的纹理单元会发生什么,我是否需要为此使用不同的采样器。
采样器总是从当前绑定的纹理中读取它所设置的纹理单元。由于默认的活动纹理单元是单元 0,采样器的默认值也是 0,除非您更改采样器或活动纹理单元,否则您的代码应该可以正常工作。
如果将纹理绑定到另一个纹理单元,则必须确保活动纹理单元 (glActiveTexture
) 与为采样器 (glUniform1i
) 设置的值相匹配。如果您绑定,例如,纹理到 GL_TEXTURE2
,那么您必须将采样器设置为 glUniform1i(sampler_location, 2)
。
假设我有三个不同的纹理对象,上面有不同的图像数据。这三个纹理对象都绑定到纹理单元0.
我的场景中有三个模型,每个模型都使用其中一种纹理。
在我的片段着色器中,我有一个 sampler2D 变量。并且所有模型都使用相同的着色器程序进行渲染。
现在我依次进行以下操作
- 绑定纹理对象 1
渲染模型 1
绑定纹理对象2
渲染模型 2
绑定纹理对象3
- 渲染模型 3
想问的是,你用不同的纹理对不同的模型进行纹理处理,片段着色器中的采样器是否从当前绑定的纹理中读取数据。如果纹理绑定到不同的纹理单元会发生什么,我是否需要为此使用不同的采样器。
采样器总是从当前绑定的纹理中读取它所设置的纹理单元。由于默认的活动纹理单元是单元 0,采样器的默认值也是 0,除非您更改采样器或活动纹理单元,否则您的代码应该可以正常工作。
如果将纹理绑定到另一个纹理单元,则必须确保活动纹理单元 (glActiveTexture
) 与为采样器 (glUniform1i
) 设置的值相匹配。如果您绑定,例如,纹理到 GL_TEXTURE2
,那么您必须将采样器设置为 glUniform1i(sampler_location, 2)
。