将gl_FragCoord坐标转换为屏幕位置

时间:2016-02-24 13:55:20

标签: opengl shader fragment-shader

我严格地谈论二维环境(实际上这是一场2D游戏)。

在片段着色器中,如何将gl_FragCoord.x和gl_FragCoord.y转换为屏幕坐标,使左上角像素为0,0,右下角为屏幕分辨率(例如800,600)?感谢

1 个答案:

答案 0 :(得分:4)

默认情况下,原点位于左下角,像素以半整数坐标为中心(左下角像素位于(0.5,0.5)处)。实现所需目标的一种方法是使用布局限定符重新声明gl_FragCoord

layout(origin_upper_left) in vec4 gl_FragCoord;

layout(origin_upper_left, pixel_center_integer) in vec4 gl_FragCoord;

如果您希望像素以整数坐标为中心。

另一种方法是在统一变量中传递屏幕分辨率并进行一些数学运算:

vec2 pos = vec2(gl_FragCoord.x, resolution.y - gl_FragCoord.y);

或获取整数值:

vec2 pos = vec2(gl_FragCoord.x, resolution.y - gl_FragCoord.y) - 0.5;

请注意,如果您希望像素以整数坐标为中心,则与原点相对的角上的像素将为resolution - 1.0而不是resolution

相关问题