0

gl_PrimitiveID似乎计算了渲染的基元数量。这似乎可以通过片段和几何着色器获得。

这是否是视锥体中渲染三角形的准确计数(假设只有 tris,因为图元 ID 也适用于线和点)而不是整个场景?

4

1 回答 1

4

gl_PrimitiveID变量从几何着色器输出并馈送到片段着色器。如果不存在几何着色器,则片段着色器gl_PrimitiveID是当前渲染调用中已处理的图元数。也就是说,它是通过顶点处理管道发送的点/线/三角形的数量。如果您跟注glDrawArrays(GL_TRIANGLES, 0, 33);,您将gl_PrimitiveID在半开范围 [0, 11) 上得到 a。

如果存在几何着色器gl_PrimitiveID采用您从 GS 输出的任何值。如果 GS 存在并且您没有写入该值,则片段着色器将获得未定义的值。请注意,您可以只复制gl_PrimitiveIDIngl_PrimitiveID您编写的每个顶点以获得标准的 OpenGL 行为。

简而言之,不,它没有考虑视锥体剔除。除非您的 GS 确实确实查看了每个三角形的截锥体剔除(我会建议这样做)。

于 2012-10-01T00:01:36.310 回答