我是OpenGL和着色器的新手,我正在试验将多个纹理发送到着色器,我注意到一些奇怪的东西。
所以我的情况是这样的。我有一个片段着色器,看起来像这样。
#version 440 core
in vec3 vs_position;
in vec3 vs_color;
in vec2 vs_texcoord;
in vec3 vs_normal;
out vec4 fs_color;
uniform sampler2D texture0;
uniform sampler2D texture1;
void main() {
fs_color = texture(texture0, vs_texcoord) * texture(texture1, vs_texcoord);
}
在某些时候,我停止了为texture1发送数据,但我忘了从着色器中删除代码。很明显,这是一个bug,程序没有按照预期工作,但我注意到,当我有这个bug的时候,颜色看起来更深,不像我修复代码并从着色器中删除texture1相关的东西时那么平坦。
所以这就是我的情况
现在我明白了,一旦我添加了适当的光照和所有这些,纹理看起来就不会再平坦了,但我还是很困惑,当我将texture0数据(我实际设置的纹理)与texture1数据(没有设置)相乘时,到底发生了什么?
sampler2D的默认值是多少,是什么原因导致了这种颜色偏移?
默认情况下,采样器是绑定到纹理单元0的。我想,你所得到的外观可能是你也将纹理单元0绑定到了...。texture0
并基本与自身的纹理相乘。