2011-11-29 60 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

这正是我最终做的。 –