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