2013-12-16 100 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'等),然後在你的頂點着色器以彌補。這是很多工作和複雜性,可能並不簡單或更快。