好吧,在我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人)。所以如果你要乘以一半屏幕上的大小在一个特定的尺寸,再加那个大小,你会得到实际的视像素。

其他提示

你有问题是,gl_ModelViewProjectionMatrix*gl_Vertex计算在色器不是永远什么样的固定管道功能的收益。要获得相同的结果,做fake_frag_coord=ftransform().

编辑:

然后它的规模与你的屏幕上方面。

我希望我有更多的代表所以我可以挑剔。这是什么我知道的。照片进行分W自动的,所以由当时的位置到达一个片段色器,它已经在国家数据中心的坐标,并且通过,然后W将1.0,唯一的时候你需要除W是如果你想要做的同样的数学上的CPU侧,并得到相同的结果,或者,如果对于一些奇怪的原因,想要获得国家数据中心的坐标在你的顶点色器。

varying vec2 fake_frag_coord;
//in vertex shader:

fake_frag_coord=(gl_ModelViewMatrix * gl_Vertex).xy
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top