Opengl 将gl_FragCoord坐标转换为屏幕位置
严格来说,我指的是2d环境(实际上这是2d游戏)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; 或 如果希望像素以整数
在片段着色器中,如何将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
而不是分辨率