Android Mesh渲染问题

时间:2012-01-26 14:33:42

标签: android opengl-es rendering

这次我的模型实际呈现出现问题。我可以通过Libgdx loadObj()函数加载它,并使用GL10_Triangles渲染它,但是我在模型中不断丢失三角形(似乎只有一半的模型被渲染)。我已经尝试了旧的ObjLoad功能(注释掉)以及不同的渲染样式,但似乎没有任何效果。

是的,我已经在Blender中检查了模型,模型完整而没有丢失面孔。

请参阅下面的打印屏幕,以及下面的代码。 任何帮助都会非常棒,因此我非常沮丧,因为我已经非常接近工作了。

Print Screen 这是代码。

public class LifeCycle implements ApplicationListener {

Mesh model;
private PerspectiveCamera camera;

public void create() {

    InputStream stream = null;
    camera = new PerspectiveCamera(45, 4, 4);
    try 
    {
        stream = Gdx.files.internal("Hammer/test_hammer.obj").read();
        //model = ModelLoaderOld.loadObj(stream);
        model = ObjLoader.loadObj(stream,true);
        stream.close();
    } 
    catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    Gdx.gl.glEnable(GL10.GL_DEPTH_TEST);
    Gdx.gl10.glTranslatef(0.0f, 0.0f, -3.0f);
}

protected float rotateZ = 0.1f;
protected float increment = 0.1f;

public void render()
{
    Gdx.app.log("LifeCycle", "render()");
    Gdx.gl.glClearColor(0.0f, 0.0f, 0.5f, 1.0f);
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
    camera.update();
    camera.apply(Gdx.gl10);
    Gdx.gl10.glTranslatef(0.0f, 0.0f, -3.0f);
    Gdx.gl10.glRotatef(rotateZ, rotateZ, 5.0f, rotateZ);
    model.render(GL10.GL_TRIANGLES);

    rotateZ += increment;
    System.out.println(""+rotateZ);
}
}

1 个答案:

答案 0 :(得分:2)

这实际上看起来像OBJ文件存储四边形而不是三角形,但是你的加载例程只是将它们读作三角形(只读取一个面的前3个索引组)。虽然Blender可能(并且应该)足够智能来处理四边形,但是你的装载程序却不是。所以要么写一个更好的OBJ加载器(但我想这不是你的类),配置你的OBJ加载器来正确处理四边形(如果可能的话),或者将模型导出为三角形而不是四边形(如果可能的话)。