好的,在我的GLSL片段着色器中,我希望能够计算片段与空间中特定线的距离。

结果是,我首先尝试在顶点着色器中使用变化的vec2集来镜像gl_FragCoord中的结果:

varying vec2 fake_frag_coord;
//in vertex shader:
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
fake_frag_coord=(gl_ModelViewProjectionMatrix * gl_Vertex).xy;


现在在片段着色器中,我期望:

gl_FragCoord.xy==fake_frag_coord


但事实并非如此。管道在gl_Position上执行什么操作以将其转换为我忽略在gl_FragCoord上进行的fake_frag_coord

最佳答案

gl_FragCoord是屏幕坐标,因此您需要具有有关屏幕尺寸的信息,并根据位置来生成屏幕尺寸。您产生的fake_frag_coord将对应于屏幕中我认为归一化的设备坐标中的一点(-1到1)。因此,如果将特定尺寸的屏幕尺寸乘以一半,然后相加,您将获得实际的屏幕像素。

08-06 08:07