【问题标题】:How to load a default colour if the sampler2D was empty如果 sampler2D 为空,如何加载默认颜色
【发布时间】:2021-02-27 13:41:37
【问题描述】:

如果sampler2D 没有加载图像,我想加载默认颜色vertColor,为了实现这一点,我尝试了以下方法:

片段着色器:

#version 410

uniform sampler2D tex0;
in vec4 vertColor;
in vec2 TexCoords;

out vec4 fragColor;

void main( void )
{
     vec4 texColor = texture(tex0, TexCoords);
     if(tex0 == -1)  fragColor = blinnPhongModel(vertColor);
     else{
     texColor.a = 1.0;
     fragColor = texColor;
     }//end of else

} // End of main

但它不起作用,我该怎么做?

【问题讨论】:

    标签: opengl glsl shader textures fragment-shader


    【解决方案1】:

    如果 sampler2D 为空,如何加载默认颜色?

    你为什么要这样做?我建议确保采样器永远不会“空”。

    如果您想使用采样器以统一的颜色进行绘制,请创建一个具有单个像素的 1x1 纹理。有了这个技巧,你就不需要在着色器中分支了。

    您所要做的就是创建一个 1x1 纹理。此纹理有 1 个像素和 1 种颜色。
    片段着色器只进行纹理查找,根本没有分支:

    #version 410
    
    uniform sampler2D tex0;
    in vec2 TexCoords;
    out vec4 fragColor;
    
    void main( void )
    {
         vec4 texColor = texture(tex0, TexCoords);
         fragColor = texColor;
    }
    

    【讨论】:

    • 因为我是 GLSL 新手,我不知道该怎么做,你能解释一下你的建议吗?
    • @Bilal 抱歉,没有什么好解释的。您所要做的就是绑定一个 1x1 纹理。
    猜你喜欢
    • 2019-09-07
    • 2017-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-26
    • 1970-01-01
    相关资源
    最近更新 更多