【发布时间】:2015-01-24 11:51:18
【问题描述】:
这是我想要做的:我想要一个模块化立方体,当触摸另一个时会禁用彼此之间的两个面。像这样:
我想让灰色的脸消失。
理论上看起来很简单吧?
除了我们应该在现代 OpenGL 中制作形状的方式。首先我们声明顶点,然后声明哪个与哪个连接的索引。
FloatBuffer vertices = BufferUtils.createFloatBuffer(8 * 6);
vertices.put(new float[]{
// front // color
-0.5f, -0.5f, 0.5f, 0.75f, 0.75f, 0.75f,
0.5f, -0.5f, 0.5f, 0.75f, 0.75f, 0.75f,
0.5f, 0.5f, 0.5f, 0.35f, 0.75f, 0.9f,
-0.5f, 0.5f, 0.5f, 0.35f, 0.75f, 0.9f,
// back
-0.5f, -0.5f, -0.5f, 0.75f, 0.75f, 0.75f,
0.5f, -0.5f, -0.5f, 0.75f, 0.75f, 0.75f,
0.5f, 0.5f, -0.5f, 0.35f, 0.75f, 0.9f,
-0.5f, 0.5f, -0.5f, 0.35f, 0.75f, 0.9f,
});
vertices.flip();
IntBuffer indices = BufferUtils.createIntBuffer(12 * 3);
indices.put(new int[]{
// front
0, 1, 2,
2, 3, 0,
// top
3, 2, 6,
6, 7, 3,
// back
7, 6, 5,
5, 4, 7,
// bottom
4, 5, 1,
1, 0, 4,
// left
4, 0, 3,
3, 7, 4,
// right
1, 5, 6,
6, 2, 1,
});
indices.flip();
这构成了一个轻量级的立方体。但我不知道如何使用这个模型禁用我想要的面孔。
有没有人有一个不意味着我重新做立方体的解决方案?
谢谢
【问题讨论】:
-
谢谢。答案说我必须单独更改块顶点数据。但我不希望每个 cuve 都有自己的数据。所有立方体共享相同的顶点数据。这就是它变得复杂的原因。
-
您只能更新索引缓冲区,而不是更改顶点数据。您甚至可以预先计算不同的情况并切换到正确的缓冲区。
-
这听起来是个好主意。你知道我是否可以合并索引缓冲区吗?
-
我没有使用 LWJGL 和 IntBuffers 的经验,抱歉。