大家!我正在开发一个项目,我采用"基础"模型/网格,我将其形成为更加明确的地形.但是,当我尝试编辑网格时,我遇到了一个问题.这基本上就是我这样做的:( 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);
}
}
Run Code Online (Sandbox Code Playgroud)
唯一的问题是,当我这样做时,我只是得到一个平坦的地形.当我删除此行时:
terrain.meshes.set(0, mesh);
Run Code Online (Sandbox Code Playgroud)
我得到了地形,但每个模型实例都有相同的东西.要解决这个问题,我必须删除该行,并添加以下内容:
terrain.meshes.get(0).setVertices(vertices);
Run Code Online (Sandbox Code Playgroud)
我认为导致平面地图的线条正在发生的是当我设置它时,它会移除任何可能已经说过的东西,"嘿,这个网格与模型的这一部分有关".
更新:感谢Xoppa的评论建议我为每个地点加载一个新模型,但在这样做时,我必须使用一个G3dModelLoader.我想使用AssetManagerif甚至可能,但我认为不是......
为了解决这个问题,我制作了一个使用G3dModelLoader. 为了确保没有任何内存泄漏,我在类中创建了两个变量,即加载器本身和初始化模型的数组。当您运行该#getNewModel()方法时,它会加载新模型,将其添加到初始化模型列表中,然后返回新模型。在该#dispose()方法中,它只是运行已初始化模型的列表,并对这些模型运行 dispose 方法。