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中的动态和静态对象。我只想渲染动态对象,并通过仅渲染一次(在开始处)将静态内容保留在屏幕上。
嗨,我会在一会儿尝试这个:)但是所有的矩形应该在同一时间看到,所有的矩形。如果我只在一个onDraw调用中绘制一个Rectangle,我不认为它似乎是一个背景。 – user983814 2011-12-15 10:59:46