Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 顶点数组到浮点数组_Java_Arrays_Floating Point_Vectormath - Fatal编程技术网

Java 顶点数组到浮点数组

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

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


   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
应该提供一些方法来提取其字段的值。如果看不到这些类的结构,就不可能知道该做什么。请尝试创建一个解决方案,以确保其他人可以重现您的问题。