Java 顶点数组到浮点数组
我目前正在开发一个游戏引擎,并被要求制作一个方法,接收一个顶点数组并输出一个浮点数组。我们有一个为Vector3制作的课程。Vector3是3个浮点数x、y和z的包装器。顶点只是矢量3f的包装。如果它们是一个顶点数组,我怎么能把它变成一个浮点数组呢。这就是我目前所拥有的Java 顶点数组到浮点数组,java,arrays,floating-point,vectormath,Java,Arrays,Floating Point,Vectormath,我目前正在开发一个游戏引擎,并被要求制作一个方法,接收一个顶点数组并输出一个浮点数组。我们有一个为Vector3制作的课程。Vector3是3个浮点数x、y和z的包装器。顶点只是矢量3f的包装。如果它们是一个顶点数组,我怎么能把它变成一个浮点数组呢。这就是我目前所拥有的 public static float[] VertexArrayToFloatArray(Vertex[] vertices){ float[] floats = new float[vertices.l
public static float[] VertexArrayToFloatArray(Vertex[] vertices){
float[] floats = new float[vertices.length];
int i = 0;
for (Vertex v : vertices){
float x, y, z;
x = v.getPosition().getX();
y = v.getPosition().getY();
z = v.getPosition().getZ();
floats[i] = x;
floats[i + 1] = y;
floats[i + 2] = z;
}
System.out.println(floats);
return floats;
}
预期的输出将放入顶点数组以生成一个正方形,如
Vertex[] vertices = new Vertex[]{
new Vertex(new Vector3f(0.5f,-0.5f,0)), //Bottom Right
new Vertex(new Vector3f(-0.5f,0.5f,0)), // Top Left
new Vertex(new Vector3f(0.5f,0.5f,0)), //Top Right
new Vertex(new Vector3f(-0.5f,-0.5f,0)) //Bottom Left
}
你会得到
{0.5f,-0.5f,0,-0.5f,0.5f,0,0.5f,0.5f,0 ,-0.5f,-0.5f,0}
因此1。在您的示例中,您正在创建一个具有输入顶点数大小的数组,但由于每个顶点都有3个浮点数,因此您希望创建一个具有输入大小三倍的数组
float[] floats = new float[vertices.length*3];
2。这样,您就可以正确地执行for循环,但永远不会更改索引i
这意味着您只覆盖索引0、1和2。相反,您需要在每个循环中将
i
增加3(添加i
、i+1
和i+2
)
大概是这样的:
for (Vertex v : vertices){
float x, y, z;
x = v.getPosition().getX();
y = v.getPosition().getY();
z = v.getPosition().getZ();
floats[i] = x;
floats[i + 1] = y;
floats[i + 2] = z;
i+=3;
}
或者您可以使用i++
将i
增加1,并返回i
在增加之前的值
如果我们将这两个建议结合起来,我们会得到
public static float[] VertexArrayToFloatArray(Vertex[] vertices){
float[] floats = new float[vertices.length*3];
int i = 0;
for (Vertex v : vertices){
float x, y, z;
x = v.getPosition().getX();
y = v.getPosition().getY();
z = v.getPosition().getZ();
floats[i] = x;
floats[i++] = y;
floats[i++] = z;
}
System.out.println(floats);
return floats;
}
类
Vertex
和Vector3f
应该提供一些方法来提取其字段的值。如果看不到这些类的结构,就不可能知道该做什么。请尝试创建一个解决方案,以确保其他人可以重现您的问题。