gpt4 book ai didi

java - 在 libGDX 中设置 3d 网格的索引

转载 作者:行者123 更新时间:2023-12-01 11:59:51 24 4
gpt4 key购买 nike

我在 libGDX 中遇到了一个问题。我想用网格创建一个简单的无纹理 3D 模型。这是我迄今为止创建四面体的代码:

Material material = new Material(new IntAttribute(IntAttribute.CullFace), ColorAttribute.createDiffuse(Color.GRAY));
ModelBuilder modelBuilder = new ModelBuilder();
Mesh mesh = new Mesh(true, 6, 20, new VertexAttribute(Usage.Position, 3, "test"));
mesh.setVertices(new float[] { -0.5f, -0.5f, 0,
0.5f, -0.5f, 0,
0, 0.5f, 0,
0, 0, 1});

mesh.setIndices(new short[] {0, 3, 0, 2, 0, 1, 1, 3, 1, 2, 2, 3});
modelBuilder.begin();
modelBuilder.part("test", mesh, GL20.GL_LINE_STRIP, material);
model = modelBuilder.end();

这段代码工作正常,但我不知道如何为生成的顶点设置网格的索引。我目前得到了一个包含顶点的列表,每个顶点都有一个包含与其连接的顶点的列表。我必须如何设置网格的索引来实现这种连接?

提前致谢,并对我的英语不好表示歉意。

最佳答案

假设您只想绘制边缘,而不是曲面:

我认为不可能使用线条来绘制四面体的所有边而不至少绘制其中一条边两次。该形状还不够复杂,不足以证明尝试使用线条来优化它是合理的。我认为很少有情况需要使用线 strip 或三角形带。

因此将GL20.GL_LINE_STRIP更改为GL20.GL_LINES。现在您的索引数组应该是定义线段的索引对的列表。前两个索引定义第一个段,第三个和第四个索引定义第二个段,依此类推。

四面体有六个边,因此您应该列出点之间的所有连接。对于四面体,它是所有可能的点的组合。索引号与您定义的顶点相对应。您定义了 12 个浮点,每个顶点有 3 个浮点,因此总共四个顶点的索引为 0 到 3。

这是一个例子,尽管成对的顺序并不重要。

{
0,1, //Connect the 1st vertex (-0.5f, -0.5f, 0) to the 2nd vertex (0.5f, -0.5f, 0)
0,2, //Connect the 1st vertex to the 3rd vertex (0, 0.5f, 0)
0,3, //Connect the 1st vertex to the 4th vertex (0, 0, 1)
1,2, //Connect the 2nd vertex to the 3rd vertex
1,3, //Connect the 2nd vertex to the 4th vertex
2,3 //Connect the 3rd vertex to the 4th vertex
}

这将绘制所有边缘。

如果您想绘制实际的三角形表面,您应该使用 GL_TRIANGLES,并且您的索引列表每个三角形需要 3 个元素,总共 12 个元素。每三个元素将定义要绘制的三角形的三个角,但您还需要确保它们都以相同的方向缠绕(顺时针或逆时针,具体取决于您的剔除设置)。

实际上,对于简单的四面体,您可以使用三角形带,但如果您想向其添加照明则不需要,因为由于法线不同,面之间无法共享任何顶点。

关于java - 在 libGDX 中设置 3d 网格的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28057588/

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