首页 > 解决方案 > OpenGL着色器sampler2D的默认值是什么

问题描述

我对 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 相关的内容相比,当我遇到此错误时,颜色看起来更深且不那么平坦。

所以这就是我所拥有的

在此处输入图像描述

现在我明白了,一旦我添加了适当的照明并且所有纹理看起来不再平坦,但我仍然对当我将纹理 0 数据(我实际设置的纹理)与纹理 1 数据相乘时到底发生了什么感到困惑(这是未设置)。

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

标签: openglshader

解决方案


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


推荐阅读