libgdx android没有显示模型(黑屏)

时间:2014-10-17 13:36:21

标签: java android 3d libgdx

我是LibGDX的新手。 我尝试应用一些我在线阅读的教程来加载libGDX中的模型。 问题是当我的Galaxy Nexus(Android 4.3)上加载应用程序时,我有一个黑屏,根据LogCat没有错误。 代码是这样的:

@Override
public void create() {
    modelBatch = new ModelBatch();
    environment = new Environment();
    environment.set(new ColorAttribute(ColorAttribute.AmbientLight, 0.4f, 0.4f, 0.4f, 1f));
    environment.add(new DirectionalLight().set(0.8f, 0.8f, 0.8f, -1f, -0.8f, -0.2f));

    cam = new PerspectiveCamera(67, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    cam.position.set(7f, 7f, 7f);
    cam.lookAt(0,0,0);
    cam.near = 1f;
    cam.far = 300f;
    cam.update();

    assets = new AssetManager();
    assets.load("data/skeleton.g3db", Model.class);
    loading = true;



    camController = new CameraInputController(cam);
    Gdx.input.setInputProcessor(camController);
}

private void doneLoading() {       
       Model I_model = assets.get("data/skeleton.g3db", Model.class);
       ModelInstance I_instance = new ModelInstance(I_model);
       I_instance.transform.setToTranslation(-5f, 0, -5f);
       instances.add(I_instance);
       loading = false;
    }

@Override
public void render() {
    if (loading && assets.update())
        doneLoading();
    camController.update();

    Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);

    modelBatch.begin(cam);
    modelBatch.render(instances, environment);
    modelBatch.end();
}

@Override
public void dispose() {
    modelBatch.dispose();
    model.dispose();
    assets.dispose();
}

@Override
public void resize(int width, int height) {
}

@Override
public void pause() {
}

@Override
public void resume() {
}

}

模型"骨架"以.fbx在线获取,并使用fbx-conv转换为.g3db。 是代码还是模型错误? 感谢任何帮助。谢谢。

3 个答案:

答案 0 :(得分:0)

您好,对不起我的英语,我对模型的经验不多,但是当你指定

cam.position.set(7f,7f,7f);

cam.lookAt(0,0,0);

然后你说

I_instance.transform.setToTranslation(-5F,0,-5F);

远远超出相机的视野范围?这只是一个问题,也许是这个错误

编辑;

I_instance.transform.setToTranslation(-5f,0,-5f);

DirectionalLight()。set(float r,float g,float b,float dirX,float dirY,float dirZ)

Dirz你的不在模范的范围之内,如果你看到照明没有到达的话,你会想到-5F的变化

答案 1 :(得分:0)

我认为问题是光的方向,因为我认为这里的两个光点告诉模型有纹理出现。 enter image description here

模型可能会变坏, 使用;

PointLight set(float r,float g,float b,float x,float y,float z,float intensity)

float intensity = 1f;

environment.add(new PointLight().set(0.8f, 0.8f, 0.8f, -1f, -0.8f, -0.8f, intensity));

和托盘在测试中更改变量intesity,例如100;

答案 2 :(得分:0)

我遇到了同样的问题,我的问题是模型加载得很大,而相机在模型中。因此,请尝试按比例缩小模型或将摄像机移回很多位置。