我对 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);
}
在某个时候我停止发送纹理1的数据,但我忘记从着色器中删除代码。显然这是一个错误,程序没有按预期工作,但我注意到,与我修复代码并从着色器中删除与纹理1相关的内容相比,当我遇到此错误时,颜色看起来更深并且不那么平坦。
这就是我所拥有的
现在我明白,一旦我添加适当的照明,所有纹理将不再看起来平坦,但我仍然对当我将texture0数据(我实际设置的纹理)与texture1数据相乘时到底发生了什么感到困惑(尚未设置)。
sampler2D 的默认值是什么?是什么导致了这种颜色偏移?
最佳答案
默认情况下,采样器绑定(bind)到纹理单元 0。我猜您得到的外观可能是您还将纹理单元 0 附加到 texture0
并基本上将纹理与其自身相乘。
关于OpenGL着色器sampler2D的默认值是多少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61412852/