我正在使用glDrawArraysInstanced(GL_TRIANGLE_STRIP, 0, n, 100)
在OpenGL中创建100个柱面。现在我想把它们放在一个简单的空间网格中。因此每个气缸将与下一个气缸相距10个单位。请注意,只有x和z坐标才会改变。
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中提取这些位。
所以我的问题是,如何从ID中提取MSB / LSB?
答案 0 :(得分:3)
为什么要从中提取位?如果你有100个柱面,那么将它们放入网格中的一般模式将是以10的倍数工作。前10行进入第一行,第二行进入第二行等等。
在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值。