glsl 片段着色器矩形不会显示
glsl fragment shader rectangle wont show
我尝试在我的屏幕上绘制一个红色矩形,但在编译后我的屏幕变成了蓝色。有人可以帮助我了解我做错了什么吗?我是 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));
}
您调用函数 drawRectangle
并使用常量实际参数
drawRectangle(vec2(60,100));
注意这与:
if (60 > 60 && 60 < 200 && 100 > 60 && 100 < 200)
{
outColor = vec4(1.0, 0.0, 0.0, 0.0);
}
要解决此问题,您必须将实际参数更改为当前正在处理的片段的 window 坐标。见 gl_FragCoord
:
drawRectangle( gl_FragCoord.xy );
注意,Fragment Shader对每个片段执行一次,内置统一变量gl_FragCoord
包含当前片段的坐标。
我尝试在我的屏幕上绘制一个红色矩形,但在编译后我的屏幕变成了蓝色。有人可以帮助我了解我做错了什么吗?我是 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));
}
您调用函数 drawRectangle
并使用常量实际参数
drawRectangle(vec2(60,100));
注意这与:
if (60 > 60 && 60 < 200 && 100 > 60 && 100 < 200)
{
outColor = vec4(1.0, 0.0, 0.0, 0.0);
}
要解决此问题,您必须将实际参数更改为当前正在处理的片段的 window 坐标。见 gl_FragCoord
:
drawRectangle( gl_FragCoord.xy );
注意,Fragment Shader对每个片段执行一次,内置统一变量gl_FragCoord
包含当前片段的坐标。