0

現在、OpenGl が (滑らかなエッジのために) LineLoops を使用していくつかの単純な TriangleFans を描画するのになぜそれほど多くの時間を必要とするのか疑問に思っています。

このループは onDrawFrame() 呼び出しごとに実行されます。

for (int j = 0; j < 40; j++) {
        float rotationAngle= (float) ((j * angle) + angleBegin
                - plusAngle+ (angle/ 2f));
        GLES10.glPushMatrix();
        GLES10.glTranslatef(plusX, 0, 1f);

        GLES10.glTranslatef(0.5f * height, 0.5f * height, 0.001f);
        GLES10.glRotatef(rotationAngle, 0, 0, 0.9f);

        rectObject.render(GL_Meshobject.PrimitiveType.TriangleFan);
        rectObject.render(GL_Meshobject.PrimitiveType.LineLoop);
        GLES10.glPopMatrix();
    }

40 x 2 (ループ) 回レンダリングされるオブジェクトは、次のように作成されました。

        rectObject.addColor(0.3f, 0.3f, 0.3f, 1.0f);
    rectObject.addVertex(wert1[KOORDS_X], wert1[KOORDS_Y], 0);
    rectObject.addColor(0.3f, 0.3f, 0.3f, 1.0f);
    rectObject.addVertex(wert2[KOORDS_X], wert2[KOORDS_Y], 0);
    rectObject.addColor(0.3f, 0.3f, 0.3f, 1.0f);
    rectObject.addVertex(wert4[KOORDS_X], wert4[KOORDS_Y], 0);
    rectObject.addColor(0.3f, 0.3f, 0.3f, 1.0f);
    rectObject.addVertex(wert3[KOORDS_X], wert3[KOORDS_Y], 0);

このループの実行に 2 ~ 10 ミリ秒かかる理由は何ですか? どうすれば修正できますか?

このループの結果は、互いに接続されていないいくつかの四角形ですが、この 40 個の四角形を 1 つのオブジェクトに入れる可能性はありますか?

このメソッドは私の背景の一部を描画します。「Rendermode Dirty」のように画面に一度だけレンダリングされるようにオブジェクトを定義することはできますが、Renderer 全体ではできません。オーバーレイする SurfaceView の作成を避けたいのですが、動的と静的があります私のonDrawFrameのオブジェクト。動的オブジェクトのみをレンダリングし、静的オブジェクトを一度だけ (最初に) レンダリングして画面に表示したいと考えています。

4

1 に答える 1

0

onDraw メソッドでループするのはなぜですか? 呼び出しごとにメッシュを 40 回回転させます。各 onDraw 呼び出しの後または前に角度を大きくするだけです。

于 2011-12-15T10:35:57.170 に答える