2011-11-29 61 views
0

我使用glDrawArraysInstanced(GL_TRIANGLE_STRIP, 0, n, 100)在OpenGL中創建100個柱面。現在我想把它們放在一個簡單的太空網格中。所以每個氣缸將離下一個10個單位。請注意,只有x和z座標會改變。GLSL中int的最高位

example cylinder positions: 
1 = (0,0,0) 
2 = (0,0,10) 
3 = (10,0,0) 
4 = (10,0,10) 

我知道gl_InstanceID在頂點着色器將是對於每個氣缸一個唯一的順序ID。我無法弄清楚如何使用這個ID來創建唯一的統一的x,y,z座標。我讀過,你可以使用gl_InstanceID的最高有效位作爲x座標,最低有效位作爲z。我不知道如何從GLSL中的ID中提取這些位。

所以我的問題是,我怎樣才能提取MSB/LSB的ID?

回答

3

爲什麼要從中提取數據?如果你有100個圓柱體,把它們放在一個網格中的一般模式是以10的倍數工作。第一行10行,第二行10行等。

In GLSL,您可以使用/%。實例/ 10將是多少個Z,而實例% 10將是多少個X。

所以如果實例是3,3/10是0. 3 % 10是3.所以它會是3個X和0個Z.對於94號,94/10是9,而94 % 10是4.所以4個X和9個Z。

如果要在對象之間放一些距離,可以縮放獲得的X和Z值。

+0

這正是我最終做的。 –