2017-03-05 13 views
7

みんな!私は "基本"モデル/メッシュを取るプロジェクトに取り組んでおり、私はそれをより定義された地形のように形成します。私はメッシュを編集しようとすると問題が発生します。これは私がそれを行う方法は基本的である:(assetsAssetManagerある)テンプレートからLibGDX編集モデルメッシュ

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

UPDATE:Xoppaさんのコメント、私は各スポットのための新しいモデルをロードすることを示唆しているとおかげではなく、その行がなければPicture
:フラットマップを引き起こしラインで
そうするには、G3dModelLoaderを使用しなければなりません。それが可能であればAssetManagerを使用したいと思いますが、私はそうではないと思います...

+0

それでは、どうしたのですか? – Xoppa

+0

これを修正して、モデルを配列に積み重ねないようにします。私は、モデルが互いに独立したメッシュを持つことを望んでいます。 – mttprvst13

+0

複数のモデルを作成する場合は、複数のモデルを作成します。あなたのコードでは、1つのモデルしかありません。 – Xoppa

答えて

2

これを修正するために、私はG3dModelLoaderを使用するカスタムローダーを作成しました。私はメモリリークがないことを確認するために、クラス内にローダーそのものと初期化されたモデルの配列の2つの変数を作成しました。あなたは#getNewModel()メソッドを実行して、新しいモデルをロードし、初期化されたモデルのリストに追加して、新しいモデルを返します。 #dispose()メソッドでは、初期化されたモデルのリストを実行し、それらのモデルに対してdisposeメソッドを実行します。

関連する問題