在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