drawElements中每个元素的WebGL属性

时间:2013-12-16 23:09:13

标签: attributes buffer webgl elements

有没有办法在WebGL中指定每个元素索引的属性?这就是我的意思。

我想在边缘绘制带有线条的形状,在顶点绘制脂肪点。所以,这是我对三角形的数据结构:

顶点:[0,0,0, 1,0,0, 0,1,0] 边缘:[0,1, 1,2, 2,0]

顶点是ARRAY_BUFFER,边是ELEMENT_ARRAY_BUFFER。因此,当我使用drawElements在边缘上调用LINES时,我会得到一个三角形的轮廓。现在,我还可以将颜色属性绑定到顶点。假设我把它们全部变成红色:

颜色:[1,0,0, 1,0,0, 1,0,0]

如果我想要突出显示特定的顶点,我只需在颜色上绘制bufferSubData,然后绘制顶点的胖点,然后在绘制边缘之前将其更改回来。但是,如果我想强调优势呢?我将颜色更改为[1,1,1, 1,1,1, 1,0,0]并希望获得最佳效果。边(0,1)将为白色,但其他两条边将用渐变着色:顶点2为红色,另一边为白色(0或1)。

那么,我是否可以指定我想为索引0和1处的元素使用特定颜色,为索引2,3,4和5处的元素使用不同颜色?并且所有这些都没有在每个顶点上加倍(例如,使每个顶点数据看起来像[x,y,z, r,g,b]并且在缓冲区中并排放置其中两个,以便边可以指向相同顶点的常规或突出显示版本)。

1 个答案:

答案 0 :(得分:2)

抱歉,但不,它不会那样 - 你必须在某处复制数据。顶点不仅仅是一个位置,它是与该位置相关的所有属性的集合,因此在WebGL / OpenGL的视图中,它们是不同的顶点。

最简单的解决方案是使用更新的颜色复制顶点。你可以做更多精心设计的事情,比如有一个颜色数组,传入枚举顶点的属性(例如,顶点0得到'0',顶点1得到'1'等),然后在你的顶点着色器中有逻辑补偿。这是很多工作和复杂性,可能不会更简单或更快。