我正在尝试开发一个将用于3D对象及其仿真可视化的应用程序。在这种情况下,我必须绘制n个具有单独颜色阴影的对象(可能是三角形,矩形或其他非凸多边形)。为此,我在Qt5(OS-Windows 7/8/10)中使用QGLWidget )。
用于填充对象信息的结构:
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。
当对象数量更多时,请提出如何提高应用程序性能的建议。我不知道我在哪里做错。
该示例的屏幕截图:
在网格视图中包含对象数量的示例图像
谢谢@dave和@ Zedka9。当我开始在openGL中使用中间模式时,对我来说效果很好。我已经像这样修改了drawObject函数
对象绘图功能:
将顶点和颜色组织并复制到这些缓冲区之后
GLfloat顶点[1024 * 1024],颜色[1024 * 1024];
int vertArrayCnt; //折点数
void drawObjects(void) {
glEnableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_VERTEX_ARRAY);
glColorPointer(3, GL_FLOAT, 0, colors);
glVertexPointer(3, GL_FLOAT, 0, vertices);
glPushMatrix();
glDrawArrays(GL_TRIANGLES, 0, vertArrayCnt);
glPopMatrix();
glDisableClientState(GL_VERTEX_ARRAY); // disable vertex arrays
glDisableClientState(GL_COLOR_ARRAY);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句