【问题标题】:glsl fragment shader rectangle wont showglsl片段着色器矩形不会显示
【发布时间】:2019-03-31 23:11:24
【问题描述】:

我尝试在我的屏幕上绘制一个红色矩形,但编译后我的屏幕变成蓝色。有人可以帮我理解我做错了什么吗?我是 GLSL 新手

#version 330

out vec4 outColor;

void drawRectangle(in vec2 pixelXY)
{
    if(pixelXY.x > 60 && pixelXY.x < 200 && pixelXY.y > 60 && pixelXY.y < 200)
    {
        outColor = vec4(1.0, 0.0, 0.0, 0.0);
    }
}

void main()
{
    outColor = vec4(0.0, 0.0, 1.0 , 0.0);
    drawRectangle(vec2(60,100));
}

【问题讨论】:

    标签: java glsl fragment-shader


    【解决方案1】:

    你用恒定的实际参数调用函数drawRectangle

    drawRectangle(vec2(60,100));
    

    注意这与:

    if (60 > 60 && 60 < 200 && 100 > 60 && 100 < 200)
    {
        outColor = vec4(1.0, 0.0, 0.0, 0.0);
    }
    

    要解决此问题,您必须将实际参数更改为当前正在处理的片段的窗口坐标。见gl_FragCoord

    drawRectangle( gl_FragCoord.xy );
    

    注意,Fragment Shader 对每个片段执行一次,内置的统一变量gl_FragCoord 包含当前片段的坐标。

    【讨论】:

    • 非常感谢您的解释!它解决了我的问题,现在我更好地理解了片段着色器的工作原理
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-12
    • 2013-07-30
    • 1970-01-01
    • 2020-11-20
    • 2014-07-26
    相关资源
    最近更新 更多