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 个矩形放在一个对象中?

此方法绘制了我的背景的一部分,是否可以定义仅在屏幕上渲染一次的对象,例如“Rendermode Dirty”,但不能定义整个渲染器,我想避免创建重叠的 SurfaceView,但有动态和静态我的 onDrawFrame 中的对象。我只想渲染动态对象并通过仅渲染一次(在开始时)将静态对象保留在屏幕上。

4

1 回答 1

0

为什么要循环 onDraw 方法?每次调用旋转网格 40 次。只需在每次 onDraw 调用之后或之前增加角度。

于 2011-12-15T10:35:57.170 回答