gpt4 book ai didi

java - LWJGL - 现代 OpenGL - 如何不渲染某些三角形?

转载 作者:行者123 更新时间:2023-12-02 12:15:20 24 4
gpt4 key购买 nike

这就是我想要做的:我想要一个模块化的立方体,当触摸另一个立方体时,会禁用彼此之间的两个面。就像这样:

我想让灰色的面孔消失。

理论上看起来相当简单,对吧?

只不过这就是我们在现代 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();

这构成了一个轻量级的立方体。但我不知道如何用这个模型禁用我想要的面孔​​。

有人有一个解决方案,不需要我重新做我的立方体吗?

谢谢

最佳答案

感谢 Anton D 的提示,我已经成功解决了我的问题。

我能够像这样“合并”多个缓冲区:

i_n = BufferUtils.createIntBuffer(2 * 3);
i_n.put(new int[]{
// front
1, 0, 2,
3, 2, 0,
});
i_n.flip();

i_s = BufferUtils.createIntBuffer(2 * 3);
i_s.put(new int[]{
// back
6, 7, 5,
4, 5, 7,
});
i_s.flip();

i_e = BufferUtils.createIntBuffer(2 * 3);
i_e.put(new int[]{
// right
5, 1, 6,
2, 6, 1,
});
i_e.flip();

i_w = BufferUtils.createIntBuffer(2 * 3);
i_w.put(new int[]{
// left
0, 4, 3,
7, 3, 4,
});
i_w.flip();

每张脸都有一个。

然后,当需要渲染它们时(我预先计算了要绘制的内容),这就是我渲染它们的方式:

if(orientation.contains("n")){
GL11.glDrawElements(GL11.GL_TRIANGLES, i_n);
}
if(orientation.contains("s")){
GL11.glDrawElements(GL11.GL_TRIANGLES, i_s);
}
if(orientation.contains("e")){
GL11.glDrawElements(GL11.GL_TRIANGLES, i_e);
}
if(orientation.contains("w")){
GL11.glDrawElements(GL11.GL_TRIANGLES, i_w);
}

恐怕这不是正确的解决方案。但效果很好

关于java - LWJGL - 现代 OpenGL - 如何不渲染某些三角形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28125171/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com