2016-08-16 31 views
0

如何將頂點數據(float[])添加到Vector3f列表中?如果我嘗試,它會給我一個錯誤。如何將此float [] vertexData添加到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); 
} 
+0

你不能(直接)。 Vector3f與浮點數組的數據類型不同。另外,你的問題與XML或Collada有什麼關係? – CConard96

+0

我把xml和collada放在了一起(道歉),但如果你不能直接做,那你怎麼做?我試圖尋找一個簡單的解決方案。 – GraphicsPadawan

回答

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)); 
}