Я пытаюсь разработать приложение, которое будет использоваться для визуализации трехмерных объектов и их моделирования. В этом я должен нарисовать 'n' количество объектов (может быть треугольник, прямоугольник или некоторые другие невыпуклые многоугольники) с отдельными цветовыми оттенками. Для этого я использую QGLWidget в Qt5 (OS - Windows 7/8/10) ).
структура, используемая для заполнения информации об объектах:
typedef struct {
QList<float> r,g,b;
QList<double> x,y,z;
}objectData;
Количество объектов и соответствующие им значения координат будут считаны из файла.
функция paintGL:
void paintGL() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(25, GLWidget::width()/(float)GLWidget::height(), 0.1, 100);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0,0,5, 0,0,0, 0,1,0);
glRotatef(140, 0.0, 0.0, 1.0);
glRotatef(95, 0.0, 1.0, 0.0);
glRotatef(50, 1.0, 0.0, 0.0);
glTranslated(-1.0, 0.0, -0.6);
drawObjects(objData, 1000)
}
Функция рисования объектов:
void drawObjects(objectData objData,int objCnt) {
glPushMatrix();
glBegin(GL_POLYGON);
for(int i = 0; i < objCnt; i++) {
glColor3f(objData.r[i],objData.g[i],objData.b[i] );
glVertex3d(objData.x[i],objData.y[i],objData.z[i]);
}
glEnd();
glFlush();
glPopMatrix();
}
Проблема:
Теперь, когда количество нарисованных объектов превышает определенное максимальное значение (например, скажем, n = 5000), скорость нанесения постепенно уменьшается. Я не могу использовать QThread, поскольку он уже наследует QGLWidget.
Подскажите, пожалуйста, как повысить производительность приложения, когда количество объектов больше. Я не знаю, где я делаю ошибку.
Скриншот этого образца:
Пример изображения, которое содержит количество объектов в виде сетки
![](https://i.stack.imgur.com/mLAp0.png)