0

我目前正在开发一个游戏引擎,并被要求制作一个接收顶点数组并输出浮点数组的方法。我们有一个为 Vector3 制作的类。Vector3 是 3 个浮点数 x、y 和 z 的包装器。顶点只是 Vector3f 的包装器。所以如果他们是一个顶点数组,我怎么能把它变成一个浮点数组。这就是我到目前为止所拥有的


   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}

作为结果

4

1 回答 1

1

1. 在您的示例中,您正在创建一个大小与输入的顶点数相同的数组,但由于每个 Vertex 都有 3 个浮点数,因此您希望创建一个大小为输入大小三倍的数组

float[] floats = new float[vertices.length*3];

2.然后你正确地做 for 循环,但你永远不会改变 index i

这意味着您只覆盖索引 0,1 和 2。
取而代之的是,您需要将每个循环i增加 3(您正在添加ii+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++which 增加i1 并返回i BEFORE增加的值如果我们再结合这 2 个建议,我们得到

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;
   }
于 2020-10-20T22:17:47.143 回答