gl_PointCoord
返回表示该像素处的 UV 映射坐标的 2D 向量。但它似乎只在片段着色器中可用。我知道您可以使用 将值从顶点着色器发送到片段着色器varying
,但是您可以用其他方式发送吗?我可以获取当前顶点的 UV 坐标吗?
是否可以gl_PointCoord
在顶点着色器中访问?
“该像素处的 UV 映射坐标” - 确实,但在顶点着色器中您没有任何像素。你错过了点精灵的实际工作方式。单个顶点着色器调用输出gl_PointSize
大于 1 个像素会导致该点的多个片段着色器调用(因为该点覆盖多个像素)。这些片段gl_PointCoord
根据它们在这个更大的点精灵中的位置来获取它们。但是覆盖多个片段的每个点精灵总是来自单个顶点。所以从概念上讲,这个单个的每个顶点gl_PointCoord
只(0.5, 0.5)
适用于每个顶点,但最终即使这样也没有意义,因为实际上没有任何像素的概念,更不用说顶点着色器中的每个像素的 UV 坐标了。
“但是你能不能用另一种方式发送它” ——我敢肯定这是相当非正式的意思,因为你当然不能将任何数据从片段着色器发送到顶点着色器,因为图形管道只能在一个方向上工作。
编辑:关于您的评论,如果不使用点精灵,则该gl_PointCoord
变量根本没有任何意义。您不能将其用作一般的 UV 坐标(片段着色器应如何得出合理的值)。为此,您必须自己从顶点着色器(作为 a varying
)中取出一个有效的纹理坐标,然后将其插值到要在片段着色器中访问的片段上,可能最终attribute
像往常一样作为附加的 传递给顶点着色器。