Opengl 将gl_FragCoord坐标转换为屏幕位置

Opengl 将gl_FragCoord坐标转换为屏幕位置,opengl,shader,fragment-shader,Opengl,Shader,Fragment Shader,严格来说,我指的是2d环境(实际上这是2d游戏) 在片段着色器中,如何将gl_FragCoord.x和gl_FragCoord.y转换为屏幕坐标,以便左上角像素为0,0,右下角为屏幕分辨率(例如800600)?谢谢默认情况下,原点位于左下角,像素以半整数坐标为中心(左下角像素位于(0.5,0.5))。实现所需功能的一种方法是使用布局限定符重新声明gl\u FragCoord: layout(origin_upper_left) in vec4 gl_FragCoord; 或 如果希望像素以整数

严格来说,我指的是2d环境(实际上这是2d游戏)


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

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

layout(origin_upper_left) 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;

请注意,如果希望像素以整数坐标为中心,则原点对面角的像素将为
分辨率-1.0
而不是
分辨率

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

layout(origin_upper_left) 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;
请注意,如果希望像素以整数坐标为中心,则原点对面拐角处的像素将为
分辨率-1.0
而不是
分辨率