大家好!我正在开发一个项目,我采用“基础”模型/网格,我将其形成为更加明确的地形。但是,当我尝试编辑网格时,我遇到了一个问题。这基本上就是我这样做的:(assets
是AssetManager
)
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
更新:感谢Xoppa的评论建议我为每个地点加载一个新模型,但在这样做时,我必须使用G3dModelLoader
。如果可能的话,我想使用AssetManager
,但我认为不是......
答案 0 :(得分:3)
为了解决这个问题,我制作了一个使用G3dModelLoader
的自定义加载程序。为了确保我没有任何内存泄漏,我在类中创建了两个变量,即加载器本身和初始化模型的数组。一个运行#getNewModel()
方法,它加载新模型,将其添加到初始化模型列表,并返回新模型。在#dispose()
方法中,它只运行初始化模型列表,并在这些模型上运行dispose方法。