好的,在我的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)。因此,如果将特定尺寸的屏幕尺寸乘以一半,然后相加,您将获得实际的屏幕像素。