3Dスクラブルのようなゲームでは、わずか8FPSしか得られないというパフォーマンス上の問題があります。それを文字のタイルに絞った。そのうちの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);
}
実験している間、私はメッシュを交換する場合はその速度が(でも使用されているすべての100枚のテクスチャで)最大25 FPSを行くましたシンプルなボックス(すべての面にテクスチャを表示するので、このゲームではあまり役に立ちません)を作成して、部分ビルドコードを作成します。それらのcreateBoxメソッドもrect()を6回呼び出しますが、これまでのところ違いを見ることはできません。
modelTile = modelBuilder.createBox(0.9f, 0.1f, 0.9f, matWhite, Usage.Position | Usage.Normal | Usage.TextureCoordinates);
最初のコードで何が間違っていますか?片面のみにテクスチャを持つボックスを作成する正しい方法は何でしょうか?
デスクトップまたはAndroid/iOSに導入していますか?デスクトップにデプロイする場合は、専用のGPUが使用されていることを確認してください。私は現在、Ubuntu上で(矩形ではなく、線を使用して)何か似たようなものを実行しています。私はそれが私のNvidiaカードではなく、アプリケーションを実行している私のインテルカードだと信じているので、かなりの性能を邪魔しています。しかし、まだそれの底には達していない。 –
私が書いたFPS値は三星銀河タブ2 10.1ですが、エミュレータの値も近いです(Use Host GPUオプションがチェックされています)。 – Arthur