2

私のアプリがオブジェクトの頂点を使用する代わりに変更する場合、パフォーマンスは向上しglTranslatefますか?

NPCオブジェクトの頂点は次のように設定されます。これにより、前回の呼び出しにより、画面幅の1/10にすることができます。gl.glScalef()

protected float[] vertices = {
    0f, 0f, -1f,    //Bottom Left
    1f, 0f, -1f,    //Bottom Right
    0f, 1f, -1f,    //Top Left
    1f, 1f, -1f     //Top Right
};

現時点では、画面上に描画されるNPCオブジェクトのコレクションがあり、それらが移動するとX値とY値が更新さonDrawれ、正しい場所にNPCを描画するためのアクセスが更新されます。

onDraw(GL10 gl){
    for(int i=0; i<npcs.size(); i++){
        NPC npc = npcs.get(i);
        npc.move();
        translate(npc.x, npc.y);
        npc.draw(gl);
    }
}

translate(x,y)gl.glTranslatef()-画面サイズと比率に関連して計算を行うメソッドを呼び出している間、マトリックスをプッシュおよびポップします

npc.draw(gl)-クライアントの状態を有効にし、配列を描画します

移動関数が頂点とNPCオブジェクトを変更した場合、パフォーマンスは向上しますか?例えば;

move(){
    // ... do normal movement calculations
    float[] vewVertices = {
    x, y, 0f,
    x+npc.width, y, z,
    x, y+npc.height, z,
    x+npc.width, y+npc.height, z
    }
    vertexBuffer.put(newVertices);
    vertexBuffer.position(0);
}

パフォーマンスの向上が見られるかどうかを確認するための簡単なテストを作成しようとしていますが、これまでにこれを経験したことがあるかどうかを尋ねたいと思いました。

4

3 に答える 3

2

変換中のモデルビューマトリックスの変換は3つのフロート値の操作で構成され、頂点情報の変更は頂点の数に正比例するため、最良の方法は単純に変換関数を使用することです。

敬意を払って、提案した方法は非常に不便であり、頂点操作の代わりに行列操作に固執する必要があります。

変換操作中のマトリックスの変更の詳細については、このドキュメントを参照してください。

http://www.songho.ca/opengl/gl_transform.html

乾杯マウリツィオ

于 2012-04-30T10:24:29.723 に答える
0

現在のOpenGLアプリでテスト状態を作成した後、頂点を直接変更しても、使用しすぎてもパフォーマンスは向上しないようです。gl.glTranslatef()

于 2012-05-02T07:54:43.030 に答える
0

Maurizio Benedettiが指摘したように、頂点の数が十分に多い場合にのみ、違いがわかり始めます。

于 2012-05-02T08:36:54.420 に答える