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

Setting the indices for a 3d mesh in libGDX

我在 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();

此代码工作正常,但我不知道如何为生成的顶点设置网格索引。 我目前有一个包含顶点的列表,每个顶点都有一个列表,其中包含与其相连的顶点。 我必须如何设置网格的索引才能实现此连接?

提前致谢,抱歉我的英语不好。

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

我认为如果不至少将其中一条边绘制两次,就不可能使用线条绘制四面体的所有边。形状不够复杂,不足以证明尝试使用线带对其进行优化是合理的。我认为很少有情况会使用线带或三角带。

所以把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,并且您的索引列表需要每个三角形三个元素,总共 12 个元素。每三个元素将定义要绘制的三角形的三个角,但您还需要确保它们都沿同一方向缠绕(顺时针或逆时针,具体取决于您的剔除设置)。

实际上,在简单的四面体的情况下,您可以使用三角形带,但如果您想为其添加光照则不能,因为 none 的顶点可能由于不同的法线而在面之间共享.