当前位置: 首页 > 知识库问答 >
问题:

libgdx搅拌机模型渲染不正确

慕容文昌
2023-03-14

我面临一些渲染问题。试图建立一个2d平台游戏,我的计划是创建与搅拌机的演员。我是新手,搅拌机和libgdx,不知道错误在哪里。

在《搅拌机》中,演员看起来很好。由libgdx渲染,我只看到奇怪的形式,根本不像我的演员。

-----编辑好,我缩小了问题的范围。在blender中,我创建了一个简单的立方体。在我的libgdx应用程序中,如果只渲染多维数据集而不渲染其他内容,则可以很好地渲染此多维数据集。如果我之前渲染了其他(2d)元素,并且我认为我在那里做了一些错误的事情,那么问题就会出现。

也许吧,因为我有两个摄像头?立方体的透视摄影机,其余部分的正交摄影机。。

立方体在此处呈现:

@重写公共void render(){//System.out.println(“render”);如果(正在加载

    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();
}

我的主类也有一个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中的一个示例来渲染演员。这是斯皮尔3D课。

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;
}

}

共有1个答案

凌善
2023-03-14

在创建模型的实例之前,您看起来并不是在解析模型。

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

 类似资料:
  • 我目前正在libgdx中试验不同的相机(使用ShapeRenderer)。然而,我发现在某些旋转时,它会停止渲染形状的部分。 例如,带有相机的正常形状 位置:(8.999996,7.699995,5.599995) 方向: (0.04838332,-0.60004705,-0.7576189): 但是,对于相机位置:(8.999996,7.699995,5.0999956)方向:(0.678907

  • 问题内容: 我有一个使用FitViewport的尺寸为800x480的游戏世界,最初使用像素来渲染box2d物体+固定装置,因此所有物理效果看起来都是漂浮而缓慢的。通过查看文档,我发现box2d使用度量单位,因此我将box2d的位置和大小转换为32倍,因此最终得到了25x15米的box2d世界。 我遇到的问题是,现在box2d对象变得非常小。如何缩小它们,使它们在屏幕上显示常规尺寸? 问题答案:

  • 当项目的父POM由于其子级而使用打包模式POM时,是否可以使用Spring Boots Maven插件命令? 我有一个多模块maven项目,它有一个“主”POM,它是Spring Boot父模块的子模块。看起来像这样: 这基本上是我们的“主人”POM,每个孩子都用它作为父母。现在我们要从这个“master”POM所在的工作目录中执行命令。问题是,这会生成一个,这是奇怪的,因为module1(这个类

  • 我有两个VBO,我试图渲染,它们在屏幕上应该有两个不同的位置。当我试图修改其中一个VBO的位置时,它会被转移到另一个VBOs。 示例-我更改了对象2的y位置,对象1和对象2现在都存在于该y位置。 我用于转换VBO的代码: 请注意位置,旋转,缩放都是Vector3fs,modelMatrix是well,模型矩阵。 此外,这是一个工具包。degToRad类似于数学。toRadians()类型的方法。

  • 6.1 渲染模板 一旦你拥有一个模版文件,你可以通过给一个map来给它传递数据。 map是一个变量及赋予的值的集合,模板使用它来得到变量的值,或者对于块标签求值。 它的渲染函数有一个可选的变量键值对map 通过 ctx.Render() 方法来渲染模板,例如: func (r *Render) Serve(ctx *faygo.Context) error { return ctx.Ren

  • 我在android上使用libgdx时遇到字体问题。当我第一次打开应用程序时,它们工作得很好。但是,当我暂停应用程序然后继续时,字体呈现不正确。 下面是我如何创建字体的。 我的暂停/恢复方法中没有任何内容,不确定是否应该有什么内容。 这是它之前/之后的样子。