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

时间:2015-05-14 18:10:25

标签: opengl-es vertex-shader

有没有办法告诉我们在一个顶点着色器(即绘制三角形)中正在处理三个顶点中的哪一个?

使用gl_VertexID对我来说不起作用,因为它给出顶点列表中顶点的索引,但是我使用索引来指定绘制顶点的不同顺序,所以我想要的价值无法单独从gl_VertexID确定。

2 个答案:

答案 0 :(得分:1)

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

四面体 3-colorable,而立方体是2-colorable,我们可以对立方体的面进行三角测量并获得3个可着色的网格。普通顶点在三角形网格中具有度数6并且是“局部”3可着色的。

enter image description here

因此,您可以尽可能地对网格进行三色处理 - 如果它失败,则必须复制顶点。不幸的是3-coloring is an NP-complete problem ,但通过一些简单的启发式方法,我认为你可以做一个相当合理的工作。

答案 1 :(得分:0)

正如我在上面评论的那样,我所寻找的是故意因管道效率原因而无法使用。请参阅以下页面中Alfonse Reinheart的评论:

this

wcochran发布的另一个答案很有意思,可能是一种将更少的信息传递给渲染管道的方法,尽管他/她指出,它的代价是一些实质性的预处理。