【问题标题】:libgdx android doesn't show model (black screen)libgdx android不显示模型(黑屏)
【发布时间】:2014-10-17 13:36:20
【问题描述】:

我是 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。 是代码错误还是模型错误? 任何帮助表示赞赏,谢谢。

【问题讨论】:

  • 有没有可能你是相机截头体之外的模型?也许将模型实例的转换设置为身份以检查这是否是问题所在。还可以尝试将透明颜色设置为黑色以外的其他颜色,以查看是否可以看到物体的轮廓,在这种情况下存在照明问题。
  • @Tenfour04 我在 render() 中添加了这一行: Gdx.gl.glClearColor(0, 0, 0.2f, 1);现在我看到的都是蓝色而不是黑色!
  • 更改模型我现在可以看到它的黑色“结构”。可能是光的问题?

标签: java android 3d libgdx


【解决方案1】:

我认为问题在于光线的方向,因为我认为这里出现了两个照明点,表明模型具有纹理。

可能是模型光线不好, 利用;

PointLight 设置(float r、float g、float b、float x、float y、float z、float 强度)

float intensity = 1f;

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

测试中的托盘更换变量强度,例如100;

【讨论】:

  • 以下代码没有任何变化: 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));浮动强度 = 100f; environment.add(new PointLight().set(0.8f, 0.8f, 0.8f, 0.8f, -1f, -0.8f, 强度)); (PointLight.set 需要 7 个参数)抱歉,我无法在 cmets 中格式化代码 -
  • @Matt 我不知道,但是你必须更改 cre 参数:-1f,-0.8f,-0.2f 其他人,灯光的外观是否来自不会照亮的角度所有对象
【解决方案2】:

你好,对不起我的英语,我对模型没有太多经验,但是当你分配时

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 your not 超出了模型的范围,-5F 改变了 aver 1f 想想如果你看到灯光没有到达

【讨论】:

  • 感谢您的回复。我改变了模型,使用另一个在网上找到的模型,现在我可以看到没有纹理的模型“结构”(我可以在蓝屏上看到黑色模型)。我试图弄清楚它是模型错误还是灯光错误:)
  • 我不知道为什么,但是如果我尝试加载该模型(ship.g3db),应用程序将无法工作:它说即使模型正确位于资产中也无法加载/data 文件夹(我放置另一个模型的同一文件夹)。将该模型更改为旧模型,它“有效”(存在常见问题)
  • 什么都没发生!加载桌子的模型我得到这个:imageshack.com/a/img746/9977/VzpF7c.jpg
【解决方案3】:

我遇到了同样的问题,我的问题是模型加载得很大,而相机在模型中。所以试着缩小你的模型,或者把相机向后移动很多。

【讨论】:

    猜你喜欢
    • 2015-02-16
    • 2014-01-08
    • 1970-01-01
    • 2021-12-06
    • 2018-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    相关资源
    最近更新 更多