在3D拼图游戏中,我的性能问题只有8个FPS。将其缩小为字母瓦片。有100个,减少他们的数量迅速提高性能。我排除了纹理绑定,因为即使所有拼贴具有与截图一样的纹理,速度也不会提高。在libgdx的一边建立一个纹理的框 - 性能
这是我创建的每个盒子:
public static void createModel() {
matWhite = new Material(ColorAttribute.createDiffuse(Color.WHITE));
ModelBuilder modelBuilder = new ModelBuilder();
modelBuilder.begin();
MeshPartBuilder tileBuilder;
tileBuilder = modelBuilder.part("top", GL10.GL_TRIANGLES, Usage.Position | Usage.Normal | Usage.TextureCoordinates, matWhite);
tileBuilder.rect(-0.45f, 0.1f, 0.45f, 0.45f, 0.1f, 0.45f, 0.45f, 0.1f, -0.45f, -0.45f, 0.1f, -0.45f, 0f, 1f, 0f);
tileBuilder = modelBuilder.part("bottom", GL10.GL_TRIANGLES, Usage.Position | Usage.Normal, matWhite);
tileBuilder.rect(-0.45f, 0f, -0.45f, 0.45f, 0f, -0.45f, 0.45f, 0f, 0.45f, -0.45f, 0f, 0.45f, 0f, -1f, 0f);
tileBuilder = modelBuilder.part("front", GL10.GL_TRIANGLES, Usage.Position | Usage.Normal, matWhite);
tileBuilder.rect(-0.45f, 0.1f, 0.45f, -0.45f, 0f, 0.45f, 0.45f, 0f, 0.45f, 0.45f, 0.1f, 0.45f, 0f, 0f, 1f);
tileBuilder = modelBuilder.part("left", GL10.GL_TRIANGLES, Usage.Position | Usage.Normal, matWhite);
tileBuilder.rect(-0.45f, 0.1f, 0.45f, -0.45f, 0.1f, -0.45f, -0.45f, 0f, -0.45f, -0.45f, 0f, 0.45f, -1f, 0f, 0f);
tileBuilder = modelBuilder.part("right", GL10.GL_TRIANGLES, Usage.Position | Usage.Normal, matWhite);
tileBuilder.rect(0.45f, 0.1f, 0.45f, 0.45f, 0f, 0.45f, 0.45f, 0f, -0.45f, 0.45f, 0.1f, -0.45f, 0f, 0f, 1f);
tileBuilder = modelBuilder.part("back", GL10.GL_TRIANGLES, Usage.Position | Usage.Normal, matWhite);
tileBuilder.rect(-0.45f, 0.1f, -0.45f, 0.45f, 0.1f, -0.45f, 0.45f, 0f, -0.45f, -0.45f, 0f, -0.45f, 0f, 0f, 1f);
modelTile = modelBuilder.end();
}
public void createModelInstance(com.badlogic.gdx.assets.AssetManager assetManager) {
Texture texTile = assetManager.get("textures/" + textureFile + ".jpg", Texture.class);
Material mat = new Material(TextureAttribute.createDiffuse(texTile));
modelInstance = new ModelInstance(modelTile);
modelInstance.nodes.get(0).parts.get(0).material.set(mat);
}
虽然实验,我发现这样的速度上升到25 FPS(即使正在使用的所有100个纹理),如果我更换网部分建筑代码与创建一个简单的盒子(它显示了各方面的纹理,所以它不是非常有用的这个游戏)。他们的createBox方法也调用了rect()6次,但到目前为止我没有看到区别。
modelTile = modelBuilder.createBox(0.9f, 0.1f, 0.9f, matWhite, Usage.Position | Usage.Normal | Usage.TextureCoordinates);
我在做第一个代码时出错了吗?只有一面创建具有纹理的框的正确方法是什么?
您是在桌面上还是在Android/iOS上部署?如果您要在桌面上部署,请确保正在使用专用GPU。我目前在Ubuntu上运行类似的东西(使用行,而不是rects),并且我得到了大约1000行的类似问题。我相信这是我的英特尔卡运行的应用程序,而不是我的Nvidia卡,因此阻碍了性能相当多。尽管如此,还没有到底。 –
我写的FPS值在三星Galaxy Tab 2 10.1上,尽管模拟器值也很接近(选中Use Host GPU选项)。 – Arthur