gl_PointCoord
返回表示该像素处的UV贴图坐标的2D矢量。但它似乎只在片段着色器中可用。我知道您可以使用varying
将值从顶点着色器发送到片段着色器,但是您可以通过其他方式发送它吗?我可以获取当前顶点的UV坐标吗?
是否可以在顶点着色器中访问gl_PointCoord
?
答案 0 :(得分:1)
“该像素处的UV贴图坐标” - 的确,但在顶点着色器中没有任何像素。你错过了点精灵的实际工作方式。放置大于1像素的gl_PointSize
的单个顶点着色器调用会导致此点的多个片段着色器调用(因为该点可以覆盖多个像素)。并且这些片段根据它们在这个更大的精灵中的位置获得gl_PointCoord
。但是覆盖多个片段的每个点精灵总是来自单个顶点。所以从概念上讲,这个单顶点gl_PointCoord
对于每个顶点都只是(0.5, 0.5)
,但最后甚至这没有意义,因为实际上没有任何像素的概念,更不用说每像素UV - 在顶点着色器中进行协调。
“但是你可以用其他方式发送它吗?” - 我确信这是非正式的,因为当然你不能将任何数据从片段着色器发送到顶点着色器,如图形管道只能在一个方向上工作。
编辑:关于您的评论,如果不使用点精灵,gl_PointCoord
变量根本没有任何意义。您不能将它用作一般的UV坐标(片段着色器应该如何提供合理的值)。为此,您必须从顶点着色器(作为varying
)输出一个有效的纹理坐标,然后在片段着色器中对要访问的片段进行插值,最后可能会作为附加内容传递到顶点着色器中attribute
,与往常一样。