如何区分正在绘制三角形的 GLES 顶点着色器中的顶点 1、2 和 3

How to discriminate between vertices 1,2, and 3 inside a GLES Vertex Shader that is drawing triangle(s)

有什么方法可以从 gl es 顶点着色器(即绘制三角形)中判断正在处理三个顶点中的哪一个?

使用gl_VertexID对我不起作用,因为它在顶点列表中给出了顶点的索引,但我使用索引来指定不同的索引为了绘制顶点,所以我想要的值不能单独从 gl_VertexID 确定。

您可以添加一个顶点属性来表示索引 0、1、2,但正如 @matic-oblak 指出的那样,您可能必须复制一些在三角形之间共享的顶点。如果网格是 "three-colorable"(在图论意义上),那么您可以分配索引而无需任何复制。

四面体不是 3 色,而立方体是 2 色,我们可以对立方体的面进行三角剖分并得到 3 色网格。普通顶点在三角形网格中的阶数为 6,并且是 "locally" 3 色可着色的。

因此,您可以尽可能多地对网格进行 3 色着色——如果失败,您将不得不复制顶点。不幸的是 3-coloring is an NP-complete problem ,但通过一些简单的启发式方法,我认为您可以完成相当合理的工作。

正如我在上面评论的那样,出于管道效率的原因,我正在寻找的东西故意不可用。请参阅以下页面中 Alfonse Reinheart 的评论:

https://www.opengl.org/discussion_boards/showthread.php/181822-gl_VertexId-gl_InstanceID-gl_PrimitiveID-but-where-is-gl_IndexID

wcochran 发布的另一个答案很有趣,它可能是一种将较少信息传递给渲染管道的方法,尽管正如 s/he 指出的那样,它是以大量预处理为代价的。