OpenGL着色器sampler2D的默认值是什么

OpenGL着色器sampler2D的默认值是什么,opengl,shader,Opengl,Shader,我对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;

我对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,程序没有按预期工作,但我注意到,与我修复代码并从着色器中删除与纹理1相关的内容时相比,当我有这个bug时,颜色看起来更深,也没有那么平坦

这就是我所拥有的

现在我明白了,一旦我添加了适当的照明,所有的纹理将不再看起来平坦,但当我将texture0数据(我实际设置的纹理)与texture1数据(未设置)相乘时,我仍然不清楚到底发生了什么


sampler2D的默认值是什么?是什么导致了这种颜色偏移?

默认情况下,采样器绑定到纹理单元0。我猜你看到的可能是,你还将纹理单元0附加到
texture0
,并基本上将纹理与自身相乘。

默认情况下,采样器绑定到纹理单元0。我猜你看到的可能是,你还将纹理单元0附加到
texture0
,并基本上将纹理与自身相乘。

啊,这很有意义。我试着做了fs_color=texture(texture0,vs_texcoord)*texture(texture0,vs_texcoord),得到了相同的结果,因此确实texture1得到了与texture0相同的纹理。谢谢。@Saik:很高兴我能帮上忙:)啊,这太有道理了。我试着做了fs_color=texture(texture0,vs_texcoord)*texture(texture0,vs_texcoord),得到了相同的结果,因此确实texture1得到了与texture0相同的纹理。谢谢。@Saik:很高兴我能帮忙:)