如何将顶点数据(float[])添加到Vector3f列表?如果尝试,它给我一个错误。

float[] vertexData = new float[ allindices2.length * vertexDataSize / 3];
for (int i = 0; i < vertexData.length / vertexDataSize; i++){
      vertexData[i * vertexDataSize + 0] = Float.parseFloat(allindices2 [Integer.parseInt(allindices2 [i * source.size() + 0]) * 3 + 0]);
      vertexData[i * vertexDataSize + 1] = Float.parseFloat(allpositions2[Integer.parseInt(allindices2[i * source.size() + 0]) * 3 + 1]);
      vertexData[i * vertexDataSize + 2] = Float.parseFloat(allpositions2[Integer.parseInt(allindices2[i * source.size() + 0]) * 3 + 2]);

      vertices.add(vertexData);
}

最佳答案

如果出于任何其他原因不需要vertexData数组,则根本不要创建它。相反,您可以直接创建所需的Vector3f实例。

for (int i = 0; i < vertexData.length / vertexDataSize; i++){

      float x = Float.parseFloat(allindices2  [Integer.parseInt(allindices2[i * source.size() + 0]) * 3 + 0]);
      float y = Float.parseFloat(allpositions2[Integer.parseInt(allindices2[i * source.size() + 0]) * 3 + 1]);
      float z = Float.parseFloat(allpositions2[Integer.parseInt(allindices2[i * source.size() + 0]) * 3 + 2]);

      vertices.add(new Vector3f(x,y,z));
}


但是,所有这些parse...调用和一般结构都非常可疑。除非直接从文件中获取此数据,否则应考虑使用其他数据模型。

另外:


您确定第一个allindices2不应为allpositions2吗?
不需要做两次工作。您可以提取索引的计算。


该代码很可能也可以写成

for (int i = 0; i < vertexData.length / vertexDataSize; i++){
      int index = Integer.parseInt(allindices2[i * source.size()]);
      float x = Float.parseFloat(allpositions2[index * 3 + 0]);
      float y = Float.parseFloat(allpositions2[index * 3 + 1]);
      float z = Float.parseFloat(allpositions2[index * 3 + 2]);
      vertices.add(new Vector3f(x,y,z));
}

10-07 16:41