理解纹理
问题描述:
比方说,我有三个不同的纹理对象与他们不同的图像数据。这三个纹理对象都绑定到纹理单元0.理解纹理
我在场景中有三种模型,每种都使用这些纹理之一。
在我的片段着色器中,我有一个sampler2D变量。所有模型都使用相同的着色器程序进行渲染。
现在我做在序列以下操作
- 绑定纹理对象1
渲染模型1
绑定纹理对象2
渲染模型2
绑定纹理对象3
- 渲染模型3
有什么想问的是这一点,你纹理不同质地不同型号的方式,确实在片段着色器取样器读取当前绑定的纹理数据。如果纹理绑定到不同的纹理单元会发生什么,我需要一个不同的采样器。
答
采样器总是从当前绑定的纹理读取它所设置的纹理单元。由于默认的活动纹理单位是单位0,并且采样器的默认值也是0,所以您的代码应该工作,除非您更改采样器或活动纹理单位。
如果纹理绑定到另一个纹理单元,你必须确保该活动的纹理单元(glActiveTexture
)与采样(glUniform1i
)设定的值相匹配。如果绑定,例如纹理为GL_TEXTURE2
,则必须将采样器设置为glUniform1i(sampler_location, 2)
。