我可以在顶点着色器中访问gl_PointCoord吗?

时间:2012-12-07 08:26:45

标签: opengl-es glsl webgl

gl_PointCoord返回表示该像素处的UV贴图坐标的2D矢量。但它似乎只在片段着色器中可用。我知道您可以使用varying将值从顶点着色器发送到片段着色器,但是您可以通过其他方式发送它吗?我可以获取当前顶点的UV坐标吗?

是否可以在顶点着色器中访问gl_PointCoord

1 个答案:

答案 0 :(得分:1)

“该像素处的UV贴图坐标” - 的确,但在顶点着色器中没有任何像素。你错过了点精灵的实际工作方式。放置大于1像素的gl_PointSize的单个顶点着色器调用会导致此点的多个片段着色器调用(因为该点可以覆盖多个像素)。并且这些片段根据它们在这个更大的精灵中的位置获得gl_PointCoord。但是覆盖多个片段的每个点精灵总是来自单个顶点。所以从概念上讲,这个单顶点gl_PointCoord对于每个顶点都只是(0.5, 0.5),但最后甚至这没有意义,因为实际上没有任何像素的概念,更不用说每像素UV - 在顶点着色器中进行协调。

“但是你可以用其他方式发送它吗?” - 我确信这是非正式的,因为当然你不能将任何数据从片段着色器发送到顶点着色器,如图形管道只能在一个方向上工作。

编辑:关于您的评论,如果不使用点精灵,gl_PointCoord变量根本没有任何意义。您不能将它用作一般的UV坐标(片段着色器应该如何提供合理的值)。为此,您必须从顶点着色器(作为varying)输出一个有效的纹理坐标,然后在片段着色器中对要访问的片段进行插值,最后可能会作为附加内容传递到顶点着色器中attribute,与往常一样。