我从archive3d下载了一个表格模型,使用blender将 .3ds 模型转换为 .fbx 并使用 fbx-converter ,由 libGDX 提供给 .g3db 格式模型。 我在 资产 文件夹中包含了所有纹理和模型。
这是我的代码:
`@Override
public void create() {
camera = new PerspectiveCamera(75, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
camera.position.set(0f, 0f, 2f);
camera.lookAt(0f, 0f, 0f);
camera.near = 0.1f;
camera.far = 300f;`
batch = new ModelBatch();
UBJsonReader jsonReader = new UBJsonReader();
G3dModelLoader modelLoader = new G3dModelLoader(jsonReader);
model = modelLoader.loadModel(Gdx.files.internal("table.g3db"));
modelInstance = new ModelInstance(model);
environment = new com.badlogic.gdx.graphics.g3d.Environment();
environment.set(new ColorAttribute(ColorAttribute.AmbientLight, 0.8f, 0.8f, 0.8f, 1f));
@Override
public void render() {
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);
camera.update();
batch.begin(camera);
batch.render(modelInstance, environment);
batch.end();
}
我只有一个黑色空白屏幕,没有没有错误。
答案 0 :(得分:1)
首先将您的清晰颜色更改为不同于黑色的颜色。因此,您可以验证您的模型是否未被渲染(例如,因为它不可见),或者您的模型是否有黑色材质(例如缺少纹理或不正常的法线)。
Gdx.gl.glClearColor(0.5, 0.2, 0.6, 1);
接下来删除environment
变量。如果没有它们甚至无法应用灯光,则无需应用灯光。
如果问题仍然存在,请按this tutorial进行操作。请务必了解它,包括底部的CameraInputController
部分。然后将CameraInputController添加到您的应用程序中,以便您可以移动相机,放大和缩小等。还可以修复相机的近处和远处平面。近平面的0.1f
太接近零,这可能会导致问题,而是将其设置为至少1f
。您的远程飞机设置为300f
个单位,因此如果您的模型比您的模型大,那么您将完全看不到它。对于测试,请将其设置为10000f
或其他内容(之后不要忘记减少它)。
在大多数情况下,问题是由太大或错位的模型引起的。你也应该能够在Blender中看到并修复它。对于测试,您还可以在代码中缩小模型:
modelInstance.transform.scale(0.05f, 0.05f, 0.05f);
检查this wiki page以获取有关正确导出模型的更多提示。例如。您的纹理可能无法在Blender中正确应用,或者您的顶点缠绕可能不正确导致错误的面部剔除。
如果所有这些都没有帮助,请验证您的代码是否适用于其他模型(例如the ones used in the libgdx tests或in this tutorial)。然后convert your model to a g3dj
file用文本编辑器打开它并检查它是否有问题。
答案 1 :(得分:0)
检查您何时使用fbx-conv检查是否有关于有太多顶点的警告。检查模型使用的所有材料文件和图像是否与libgx兼容。
答案 2 :(得分:0)
太多顶点。我相信使用签名的short int意味着32k的限制。你提供的链接的模型非常大,所以如果你在没有首先进行优化的情况下转换模型就会变得太大了。