【问题标题】:OpenGL shader what is the default value of sampler2DOpenGL着色器sampler2D的默认值是什么
【发布时间】:2020-04-24 16:19:45
【问题描述】:

我对 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 的默认值是多少?是什么导致了这种颜色偏移?

【问题讨论】:

    标签: opengl shader


    【解决方案1】:

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

    【讨论】:

    • 啊,这很有道理。我尝试做 fs_color = texture(texture0, vs_texcoord) * texture(texture0, vs_texcoord) 并得到了相同的结果,所以确实 texture1 得到了与 texture0 相同的纹理。谢谢。
    • @Saik:很高兴我能帮上忙 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多