2013-12-16 52 views
0

有没有一种方法可以指定WebGL中每个元素的属性?这是我的意思。绘制元素中的每个元素的WebGL属性

我想绘制边缘处的线条和顶点处的胖点的形状。所以,这里的数据结构,我想有一个三角形:

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

顶点是一个ARRAY_BUFFER和边缘是一个ELEMENT_ARRAY_BUFFER。所以当我使用LINES在边缘上调用drawElements时,我会看到一个三角形的轮廓。现在,我还可以将颜色属性绑定到顶点。假如我让他们都红了:

颜色:[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

对不起,但不是,它不会像那样工作—你必须在某处复制数据。顶点不仅仅是一个位置,它是与该位置相关的所有属性的集合,所以在WebGL/OpenGL的视图中,它们是不同的顶点。

最简单的解决方案是复制具有更新颜色的顶点。你可以做更复杂的事情,比如有一个颜色数组,传入一个枚举顶点的属性(例如,顶点0变为'0',顶点1变为'1'等),然后在你的顶点着色器以弥补。这是很多工作和复杂性,可能并不简单或更快。