好的,在我的 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
执行什么操作,将其转换为我在 fake_frag_coord
上忽略的 gl_FragCoord
?
最佳答案
gl_FragCoord 是屏幕坐标,因此您需要有关屏幕尺寸等信息才能根据位置生成它。我认为您生成的 fake_frag_coord 将对应于屏幕上标准化设备坐标中的一个点(-1 到 1)。因此,如果您将特定尺寸的屏幕尺寸乘以一半,然后添加该尺寸,您将获得实际的屏幕像素。
关于opengl - 如何在glsl中计算gl_FragCoord,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1288174/