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

Opengl es 如何区分绘制三角形的GLES顶点着色器中的顶点1、2和3,opengl-es,vertex-shader,Opengl Es,Vertex Shader,是否有任何方法可以从gl es顶点着色器(即绘制三角形)中判断正在处理三个顶点中的哪一个 使用gl\u VertexID对我不起作用,因为它给出了顶点列表中顶点的索引,但我使用索引指定不同的顺序来绘制顶点,因此我想要的值不能仅从gl\u VertexID确定。可以添加顶点属性来表示索引0、1、2,但正如@matic oblak所指出的,您可能必须复制三角形之间共享的一些顶点。如果网格是“三色”(在图论意义上)的,则可以分配索引而无需任何复制 四面体不是3色的,而立方体是2色的,我们可以对立方体的

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


使用
gl\u VertexID
对我不起作用,因为它给出了顶点列表中顶点的索引,但我使用索引指定不同的顺序来绘制顶点,因此我想要的值不能仅从
gl\u VertexID
确定。

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

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


因此,您可以尽可能多地对网格进行3色处理——如果失败,则必须复制顶点。不幸的是,通过一些简单的启发式方法,我认为您可以完成相当合理的工作。

正如我在上面所评论的,出于管道效率的原因,我所寻找的是故意不可用的。见下页阿方斯·莱因哈特的评论:


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

另一种说法是:我在寻找
v%3
的值,其中v是指定当前正在绘制的顶点的索引缓冲区值的索引。我想我已经发现,出于管道效率的原因,我所寻找的是故意不可用的。您可以添加一个顶点属性来定义该值。但是,如果重复使用顶点(使用索引),您可能会遇到问题,因为同一个顶点可能需要具有不同的值,这取决于正在绘制的三角形。即使如此,您也可以将这些值分布在形状大部分(甚至整个)的索引中。@matik obllak是正确的。如果网格是“三色”的,则可以唯一地为每个顶点指定1、2、3,但即使四面体也不是三色的。唉,你不能共享顶点,也不能有唯一的索引。