2017-03-05 91 views
7

everyone!我正在研究一個項目,我採用「基礎」模型/網格,並將其形成看起來像更加確定的地形。不過,當我嘗試編輯網格時,我遇到了一個問題。這基本上是我如何做到這一點:(assetsAssetManagerLibGDX從模板編輯模型網格

Model terrain = assets.get("terrain.g3db", Model.class); 
Mesh template = null; 
for (float x = 0; x <= maxX; x += 1f) { 
    for (float z = 0; z <= maxZ; z += 1f) { 
     Mesh m = template.copy(false); 

     // get proper vertices here 

     mesh.setVertices(vertices); 
     terrain.calculateTransforms(); 

     terrain.meshes.set(0, mesh); 

     ModelInstance terrainInstance = new ModelInstance(terrain); 
     terrainInstance.transform.setToTranslation(x, 0, z); 
     instances.add(terrainInstance); 
    } 
} 

唯一的問題是,當我這樣做,我只是得到一個平坦的地形。當我刪除這條線:

terrain.meshes.set(0, mesh); 

我得到的地形,但每個模型實例具有相同的東西。爲了解決這個問題,我已經刪除了這一行,並添加以下之一:

terrain.meshes.get(0).setVertices(vertices); 

什麼,我認爲與引起的平面地圖是當我設置它的行發生的事情,它消除任何可能會說, 「嘿,這個網格關係到模型的這個部分」。

屏幕截圖:
與導致平面地圖行:Picture
如果沒有這條線:Picture

UPDATE:由於Xoppa的評論暗示我打開一個新的模型的每個點,但在這樣做的時候,我必須使用G3dModelLoader。我想使用AssetManager如果這是可能的,但我不認爲它是...

+0

那麼,這有什麼問題? – Xoppa

+0

我該如何解決這個問題,以便我沒有將這些模型堆疊到一個數組中。我希望模型具有彼此獨立的網格。 – mttprvst13

+0

如果你想創建多個模型,然後創建多個模型。在你的代碼中你只有一個模型。 – Xoppa

回答

2

爲了解決這個問題,我做了一個使用G3dModelLoader的自定義加載程序。爲了確保我沒有任何內存泄漏,我在該類中創建了兩個變量,即加載器本身和一組初始化模型。你運行#getNewModel()方法加載新模型,將其添加到初始化模型列表中,並返回新模型。在#dispose()方法中,它只是運行初始化模型列表,並在這些模型上運行dispose方法。