2011-12-15 14 views
0

目前我想知道为什么OpenGl需要这么多时间用LineLoops绘制一些简单的TriangleFans(用于平滑边缘)。OpenGL,绘制一些Rects(TriangleFan和LineLoop)需要长达10ms

此循环在每个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×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-10ms之间持续时间的原因是什么?我该如何解决它?

这个循环的结果是一些不互相连接的矩形,但是有没有可能将这40个矩形放到一个对象中?

这种方法绘制了我的背景的一部分,是否有可能定义的对象只能在屏幕上渲染一次像“Rendermode Dirty”,但不是整个渲染器,我想避免创建叠加SurfaceViews,但在那里是我的onDrawFrame中的动态和静态对象。我只想渲染动态对象,并通过仅渲染一次(在开始处)将静态内容保留在屏幕上。

回答

0

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

+0

嗨,我会在一会儿尝试这个:)但是所有的矩形应该在同一时间看到,所有的矩形。如果我只在一个onDraw调用中绘制一个Rectangle,我不认为它似乎是一个背景。 – user983814 2011-12-15 10:59:46