几何着色器中的OpenGL gl_Postion

ffscu2ro  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(96)

我正在将顶点从顶点着色器传递到几何着色器。我在几何着色器中做透视投影。我知道在片段着色器之前,OpenGL将gl_Position向量除以w分量。这是发生在几何着色器之前还是之后?如果是在之后,有没有一种快速的方法可以在之前做,而不用在顶点着色器中手动除以w
编辑:现在这是我的顶点着色器的结束。

gl_Position = proj*view*model*vPos;
gl_Position = (1.0/gl_Position.w)*gl_Position;
8i9zcol2

8i9zcol21#

OpenGL将gl_Position矢量除以w分量。
不,不是的。它通过裁剪空间位置的w坐标划分要光栅化的顶点的裁剪空间位置。顶点的裁剪空间位置是从光栅化之前的最后一个vertex processing stage为该顶点发出的gl_Position的值。光栅化之前的所有着色器阶段都是顶点处理阶段。
不是最后这样的阶段的顶点处理阶段可以输出到gl_Position,但是这没有特殊意义。下一个顶点处理阶段可以将其作为输入,但值按原样传递。
如果它是在之后,有没有一种快速的方法可以在之前完成它,而不用在顶点着色器中手动除以w
你真的不应该 * 想 *。将后投影空间中的顶点作为4D值进行处理是完全合理的。你可以在这些顶点上应用旋转、平移等你认为合适的方法,如果你在正确的空间中这样做,结果仍然是有意义的。您甚至可以对它们应用第二个投影。

相关问题