【发布时间】:2018-11-20 15:17:45
【问题描述】:
我正在尝试开发一个应用程序,该应用程序将用于 3D 对象的可视化及其模拟。在此我必须绘制具有单独颜色阴影的“n”个对象(可能是三角形、矩形或其他一些非凸多边形)。为此,我在 Qt5 中使用 QGLWidget(操作系统 - 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。
请建议在对象数较高时如何提高应用程序的性能。我不知道我在哪里做错了。
该示例的屏幕截图:
包含网格视图中对象数量的示例图像
【问题讨论】: