目前我想知道为什么 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 中的对象。我只想渲染动态对象并通过仅渲染一次(在开始时)将静态对象保留在屏幕上。