如何将此float [] vertexData添加到Vector3f列表?

时间:2016-08-16 17:19:25

标签: java arrays lwjgl

如何将顶点数据(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);
}

1 个答案:

答案 0 :(得分:1)

如果由于任何其他原因不需要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));
}