LibGDX 从模板编辑模型网格
LibGDX edit model mesh from a template
我正在做一个项目,我把它作为一个“基地”model/mesh,我把它塑造成一个更明确的地形。但是,当我尝试编辑网格时遇到问题。这基本上就是我的做法:(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);
我认为导致平面贴图的线发生的事情是当我设置它时,它删除了可能会说“嘿,这个网格与模型的这一部分相关”的任何内容。
截图:
使用导致平面图的线:
没有那条线:
更新: 感谢 Xoppa 的评论建议我为每个点加载一个新模型,但在这样做时,我必须使用 G3dModelLoader
。如果可能的话,我想使用 AssetManager
,但我不认为它是...
为了解决这个问题,我制作了一个使用 G3dModelLoader
的自定义加载器。为了确保我没有任何内存泄漏,我在 class 中创建了两个变量,即加载程序本身和一个初始化模型数组。您 运行 #getNewModel()
方法加载新模型,将其添加到初始化模型列表,然后 returns 新模型。在 #dispose()
方法中,它只是 运行 遍历初始化模型的列表,并且 运行 是这些模型的处置方法。
我正在做一个项目,我把它作为一个“基地”model/mesh,我把它塑造成一个更明确的地形。但是,当我尝试编辑网格时遇到问题。这基本上就是我的做法:(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);
我认为导致平面贴图的线发生的事情是当我设置它时,它删除了可能会说“嘿,这个网格与模型的这一部分相关”的任何内容。
截图:
使用导致平面图的线:
没有那条线:
更新: 感谢 Xoppa 的评论建议我为每个点加载一个新模型,但在这样做时,我必须使用 G3dModelLoader
。如果可能的话,我想使用 AssetManager
,但我不认为它是...
为了解决这个问题,我制作了一个使用 G3dModelLoader
的自定义加载器。为了确保我没有任何内存泄漏,我在 class 中创建了两个变量,即加载程序本身和一个初始化模型数组。您 运行 #getNewModel()
方法加载新模型,将其添加到初始化模型列表,然后 returns 新模型。在 #dispose()
方法中,它只是 运行 遍历初始化模型的列表,并且 运行 是这些模型的处置方法。