【发布时间】: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;
}
}
【问题讨论】: