LibGDX在安卓平台上的3D游戏帧数较低

3

我刚开始学习使用libgdx进行3D渲染(使用Xoppa的教程),然后在android平台上使用.G3DB对象作为模型时遇到了帧率问题。

我从Blender中导入一个对象(之前使用fbx转换器将其转换为.g3db),在桌面上运行良好(60fps),但在android上只有5fps(我正在使用Nexus 5设备)。因此,我尝试使用相同的代码渲染一个立方体,那么就没有性能问题并且可以流畅地运行(该模型包含289个顶点)。

我在论坛上搜索了一些资料,但没有找到任何帮助我解决问题的信息。这是否是我的代码中G3dModelLoader的问题?

有谁可以帮帮我吗?
谢谢

N.B.:对不起,我的英语有误。

<!-- language-all: lang-java -->

private PerspectiveCamera camera;
private ModelBatch modelBatch;
private Model model;
private Model box;
private ModelInstance modelInstance;
private Environment environment;
private CameraInputController camController;
private ModelInstance boxInstance;

@Override
public void create() {
    camera = new PerspectiveCamera(40,Gdx.graphics.getWidth(),Gdx.graphics.getHeight());

    camera.position.set(0f,-30f,0f);
    camera.lookAt(0f,0f,0f);
    camera.near = 0.1f;
    camera.far = 60.0f;
    camera.update();

    modelBatch = new ModelBatch();

    // Blender object
    UBJsonReader jsonReader = new UBJsonReader();
    G3dModelLoader modelLoader = new G3dModelLoader(jsonReader);
    model = modelLoader.loadModel(Gdx.files.getFileHandle("data/hill.g3db", FileType.Internal));
    modelInstance = new ModelInstance(model,0,0,0);

    // Cube object
    ModelBuilder modelBuilder = new ModelBuilder();
    box = modelBuilder.createBox(2f, 2f, 2f, new Material(ColorAttribute.createDiffuse(Color.BLUE)), VertexAttributes.Usage.Position | VertexAttributes.Usage.Normal);
    boxInstance = new ModelInstance(box,0,0,0);

    environment = new Environment();
    environment.set(new ColorAttribute(ColorAttribute.AmbientLight, 0.8f, 0.8f, 0.8f, 1.0f));
    environment.add(new DirectionalLight().set(0.8f, 0.8f, 0.8f, -1f, -0.8f, -0.2f));

    camController = new CameraInputController(camera);
    camController.scrollFactor=-0.05f;
    camController.pinchZoomFactor=2f;
    Gdx.input.setInputProcessor(camController);
    camController.update();
}

@Override
public void dispose() {
    modelBatch.dispose();
    model.dispose();
    box.dispose();
}

@Override
public void render() {
    Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    Gdx.gl.glClearColor(1, 1, 1, 1);
    Gdx.gl.glClear(GL30.GL_COLOR_BUFFER_BIT | GL30.GL_DEPTH_BUFFER_BIT);

    modelBatch.begin(camera);
    modelBatch.render(modelInstance, environment);
    System.out.println(Gdx.graphics.getFramesPerSecond());
    modelBatch.end();
}

也许你可以上传这个3D模型? - brokethebuildagain
没有必要在每一帧中设置glViewport - noone
@noone 我已经将它从render()函数中移除并添加到create()函数中,但在安卓设备上仍然存在相同的帧速率问题。 - Daniel
@CullenJ 这里是包含对象的 .blend 文件:pasteall.org/blend/32919 - Daniel
1个回答

1

将文件转换为.g3dj后,我发现文件太大了。我不小心在一个.fbx文件中导出了多个对象...这是我的错误(该文件占用了15倍的空间,并导致设备变慢)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接