GLSL中int的最重要位

时间:2011-11-29 21:44:38

标签: opengl glsl

我正在使用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?

1 个答案:

答案 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值。