OpenGL着色器sampler2D的默认值是多少

标签 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;


void main() {
    fs_color = texture(texture0, vs_texcoord) * texture(texture1, vs_texcoord);
}

在某个时候我停止发送纹理1的数据,但我忘记从着色器中删除代码。显然这是一个错误,程序没有按预期工作,但我注意到,与我修复代码并从着色器中删除与纹理1相关的内容相比,当我遇到此错误时,颜色看起来更深并且不那么平坦。

这就是我所拥有的

enter image description here

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

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

最佳答案

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

关于OpenGL着色器sampler2D的默认值是多少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61412852/

相关文章:

c++ - 如何使用 OpenGL 将体积数据渲染成 3D 纹理?

c++ - 我如何在 Qt 5 中实际使用 OpenGL?

c++ - 将键盘输入的文本打印到 GLUT 窗口?

opengl - 什么时候必须将两种颜色相乘,什么时候必须相加?

c++ - glGetUniformLocation OpenGL ES 2.0 (ipad 3 iOS 7.0.3 返回结果错误)

unity3d - 理解 Unitys 中的 RGBA 编码 float (EncodeFloatRGBA)

opengl - 有多少用户可以运行使用 OpenGL 3.x 的软件?

c++ - opengl纹理贴图

image-processing - 基于 GPU 的拉普拉斯金字塔

java - OpenGL/着色器/矩阵 : Weird scaling of the shape after a rotation of the view matrix