【问题标题】:libgdx blender model is not rendered correctlibgdx 搅拌机模型未正确渲染
【发布时间】:2014-04-20 10:17:27
【问题描述】:

我遇到了一些渲染问题。尝试构建一个 2d 平台游戏,我的计划是用搅拌机创建演员。我对blender和libgdx都是新手,不知道错误在哪里。

在 Blender 中,演员看起来不错。由 libgdx 渲染,我只看到奇怪的形式,一点也不像我的演员。

----- 编辑 好的,我缩小了问题的范围。在搅拌机中,我创建了一个简单的立方体。如果我只渲染多维数据集而不渲染其他任何内容,那么这个多维数据集在我的 libgdx 应用程序中渲染得很好。 问题出现了,如果我之前渲染了我的其他 (2d) 元素并且我认为我在那里做错了。

也许是因为我有 2 个摄像头?立方体的 PerspectiveCamera,其余的 OrthographicCamera..

立方体在这里渲染:

@覆盖 公共无效渲染(){ //System.out.println("render"); if (加载 && assets.update()) 加载完成(); 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();
}

我的 Main 类也有一个 render 方法。然后从那里调用立方体渲染:

 @Override
   public void render() {
       this.handleInput();
       //this.handleContacts();
       this.moveCamera();

       GL10 gl = Gdx.graphics.getGL10();

       // Camera --------------------- /
       gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
       gl.glViewport((int) glViewport.x, (int) glViewport.y,
                     (int) glViewport.width, (int) glViewport.height);


       //tiledMapCam.zoom = 1f;
       tiledMapCam.update();
       tiledMapCam.apply(gl);

    // background      
       tileRenderer.setView(tiledMapCam);
       tileRenderer.render();


      batch.setProjectionMatrix(tiledMapCam.combined);

      batch.begin();

      for (Ball b : balls)
          b.render();
      for (Rock r : rocks)
          r.render();
      player.render();

      spieler3d.render();
      batch.end();



      // Box2d
      physics.step();
      updateObjects();      
      physics.debugRenderer.render(physics.world, tiledMapCam.combined);      
   }

----- 结束编辑

我尝试从 libgdx 改编一个样本来渲染演员。这是在 Spieler3d 类中的。

public class Spieler3d implements IObject {
AssetManager assets;
PerspectiveCamera camera;
ModelInstance instance;
ModelBatch modelBatch;
SpriteBatch spriteBatch;

@Override
public void create() {
    camera = new PerspectiveCamera(67, Gdx.graphics.getWidth(),
            Gdx.graphics.getHeight());
    camera.position.set(1,1,1);
    camera.lookAt(0,0,0);
    camera.near = 1;
    camera.far = 100;
    camera.update();
    assets = new AssetManager();
    assets.load("models/person_animated.g3dj", Model.class);
    spriteBatch = new SpriteBatch();
    modelBatch = new ModelBatch();
    // assets.getLogger().setLevel(Logger.DEBUG);
}

private void doneLoading() {
    instance = new ModelInstance(assets.get("models/person_animated.g3dj",
            Model.class));
}

float counter;

@Override
public void render() {
    if ((instance != null)
            && ((counter += Gdx.graphics.getDeltaTime()) >= 1f)) {
        counter = 0f;
        instance = null;
        assets.unload("models/person_animated.g3dj");
        assets.load("models/person_animated.g3dj", Model.class);
        assets.finishLoading();
    }

    Gdx.gl.glClearColor(0.2f, 0.2f, 0.2f, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);
    Gdx.gl.glEnable(GL20.GL_DEPTH_TEST);

    if (assets.update()) {
        doneLoading();
    }

    if (instance != null) {
        modelBatch.begin(camera);
        modelBatch.render(instance);
        modelBatch.end();

    }
}

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

@Override
public void resize(int width, int height) {
    // TODO Auto-generated method stub

}

@Override
public void pause() {
    // TODO Auto-generated method stub

}

@Override
public void resume() {
    // TODO Auto-generated method stub

}

@Override
public void setPosition(float x2, float y2) {
    // TODO Auto-generated method stub

}

@Override
public float getWidth() {
    // TODO Auto-generated method stub
    return 0;
}

@Override
public float getHeight() {
    // TODO Auto-generated method stub
    return 0;
}

@Override
public float getX() {
    // TODO Auto-generated method stub
    return 0;
}

@Override
public float getY() {
    // TODO Auto-generated method stub
    return 0;
}

}

【问题讨论】:

    标签: model libgdx blender


    【解决方案1】:

    在创建模型实例之前,您似乎没有解析模型。

    JsonModelLoader loader = new JsonModelLoader();
    model = new Model(loader.parseModel(Gdx.files.internal("models/person_animated.g3dj", null));
    instance = new ModelInstance(model);
    

    来源: http://www.badlogicgames.com/wordpress/?p=2967

    【讨论】: