gpt4 book ai didi

java - LibGDX 的 mesh.getVerticies 输出什么?

转载 作者:行者123 更新时间:2023-12-02 03:26:49 27 4
gpt4 key购买 nike

我正在开发 3D LibGDX 项目,并尝试操作 3D 模型的顶点。我已经加载模型,并将其作为我的代码:

Model plain = assets.get("plain.g3db", Model.class);
for(Mesh m : plain.meshes){
float[] t = m.getVertices(new float[m.getMaxVertices()]);
float[] newVerticies = new float[m.getMaxVertices()];
for(int i = 0; i < t.length-1; i++){
newVerticies[i] = t[i];
System.out.println("X: " + t[i] + " " + i);
newVerticies[i] = t[i];
System.out.println("Y: " + t[i++] + " " + i);
newVerticies[i] = random.nextInt(1-0) + 0;
System.out.println("Z: " + t[i++] + " " + i);
newVerticies[i] = t[i];
System.out.println("R: " + t[i++]);
newVerticies[i] = t[i];
System.out.println("G: " + t[i++]);
newVerticies[i] = t[i];
System.out.println("B: " + t[i++]);
newVerticies[i] = t[i];
System.out.println("A: " + t[i++]);
}
m.setVertices(newVerticies);
}

这并不像我想要的那样工作,但我至少可以看到模型。如果我注释掉这些行:

newVerticies[i] = t[i];
System.out.println("R: " + t[i++]);
newVerticies[i] = t[i];
System.out.println("G: " + t[i++]);
newVerticies[i] = t[i];
System.out.println("B: " + t[i++]);
newVerticies[i] = t[i];
System.out.println("A: " + t[i++]);

我刚刚遇到黑屏。即使我四处走动,我也什么也看不见。我想知道的是,到底是什么float[] t = m.getVertices(new float[m.getMaxVertices()]);输出。输出如何与模型对应?如何使Y值在一定范围内随机?

最佳答案

网格数据被组织到 VertexAttributes 中。这些始终包括位置,但也可以包括颜色、纹理坐标、法线等。例如,具有纹理的网格可能具有以下内容:

  • X、Y 和 Z 的位置 VertexAttribute 大小为 3(可能有一个位置属性只有 2 的 2D 网格)
  • U 和 V 的大小为 2 的纹理坐标 VertexAttribute
  • X、Y 和 Z 大小为 3 的普通 VertexAttribute

因此,使用 mesh.getVertices() 获得的 float 组将是每个顶点的这组 8 个浮点,一个接一个。

如果您从模型文件加载网格体而不是手动构建它,您可能不确定它具有什么 VertexAttribute 设置,因此您需要检查它以找出所需属性的偏移量是多少:

int positionOffset = mesh.getVertexAttributes().getOffset(Usage.Position);
int yOffset = positionOffset + 1; //skip X
int vertexSize = mesh.getVertexSize() / 4; //divide to convert bytes to floats

现在,如果你想改变 Y,你可以像这样循环遍历顶点:

//this is how to get the properly sized mesh:
float[] vertices = new float[mesh.getNumVertices() * mesh.getVertexSize() / 4];
mesh.getVertices(vertices);

for (int i = yOffset; i < vertices.length; i += vertexSize){
vertices[i] += someValue;
}
mesh.setVertices(vertices);

索引表示构成网格三角形的三个顶点组。如果网格上的多个顶点在多个三角形上相同,则它们可能仅在顶点列表中出现一次。这通常发生在网格的软着色顶点上,因为接触该顶点的所有相邻三角形的 UV 和法线都是相同的。

关于java - LibGDX 的 mesh.getVerticies 输出什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38731806/

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