Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java android上的LibGDX 3D低fps_Java_Android_Performance_Libgdx - Fatal编程技术网

Java android上的LibGDX 3D低fps

Java android上的LibGDX 3D低fps,java,android,performance,libgdx,Java,Android,Performance,Libgdx,我刚开始学习使用libgdx(使用Xoppa教程)渲染3D,在android上使用.G3DB对象作为模型时遇到了帧速率问题 我正在从blender导入一个对象(我以前使用fbx转换器将其转换为.g3db),该对象在桌面上运行良好(60fps),但在android上运行速度为5fps(我使用的是Nexus 5设备)。因此,我尝试使用相同的代码渲染立方体,然后我没有性能问题,它再次平稳运行(该模型包含289个顶点) 我在论坛上搜索了一下,但没有找到任何帮助我解决问题的方法。我的代码中的G3dMode

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

我正在从blender导入一个对象(我以前使用fbx转换器将其转换为.g3db),该对象在桌面上运行良好(60fps),但在android上运行速度为5fps(我使用的是Nexus 5设备)。因此,我尝试使用相同的代码渲染立方体,然后我没有性能问题,它再次平稳运行(该模型包含289个顶点)

我在论坛上搜索了一下,但没有找到任何帮助我解决问题的方法。我的代码中的G3dModelLoader有问题吗

有人能帮我吗?
多谢各位

注:对不起,我的英语不好

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

私人透视照相机;
私有模型批处理模型批处理;
私有模型;
私人模型箱;
私有模型实例模型实例;
私人环境;
专用摄像机控制器;
私有模型实例boxInstance;
@凌驾
公共void create(){
camera=new PerspectiveCamera(40,Gdx.graphics.getWidth(),Gdx.graphics.getHeight());
相机。位置。设置(0f,-30f,0f);
摄像机。注视(0f,0f,0f);
摄像机近距离=0.1f;
摄像机远距=60.0f;
camera.update();
modelBatch=新modelBatch();
//混合对象
UBJsonReader jsonReader=新的UBJsonReader();
G3dModelLoader modelLoader=新G3dModelLoader(jsonReader);
model=modelLoader.loadModel(Gdx.files.getFileHandle(“data/hill.g3db”,FileType.Internal));
modelInstance=新的modelInstance(模型,0,0,0);
//立方体对象
ModelBuilder ModelBuilder=新的ModelBuilder();
box=modelBuilder.createBox(2f,2f,2f,新材质(ColorAttribute.createDiffuse(Color.BLUE)),VertexAttributes.Usage.Position | VertexAttributes.Usage.Normal);
boxInstance=新模型实例(框,0,0,0);
环境=新环境();
set(新的ColorAttribute(ColorAttribute.AmbientLight,0.8f,0.8f,0.8f,1.0f));
添加(新的DirectionalLight().set(0.8f,0.8f,0.8f,-1f,-0.8f,-0.2f));
camController=新的CameraInputController(摄像头);
camController.scrollFactor=-0.05f;
camController.pinchZoomFactor=2f;
Gdx.input.setInputProcessor(camController);
camController.update();
}
@凌驾
公共空间处置(){
modelBatch.dispose();
model.dispose();
box.dispose();
}
@凌驾
公共无效呈现(){
glViewport(0,0,Gdx.graphics.getWidth(),Gdx.graphics.getHeight());
Gdx.gl.glClearColor(1,1,1,1);
Gdx.gl.glClear(GL30.gl_颜色_缓冲_位| GL30.gl_深度_缓冲_位);
modelBatch.begin(摄像机);
render(modelInstance,environment);
System.out.println(Gdx.graphics.getFramesPerSecond());
modelBatch.end();
}

转换为.g3dj后,我发现文件太大了,我不知何故在一个.fbx中导出了几个对象。。。这就是我的错误(该文件占用了15倍的空间,导致设备速度减慢)

也许你可以上传3D模型?没有理由在每一帧中设置
glViewport
。@noone我从render()函数中删除了它,并将其添加到create()中函数,但我仍然有相同的帧速率问题android@CullenJ下面是包含对象的.blend:pasteall.org/blend/32919