将QGLWidget与Qt5一起使用时的性能问题

阿迪西扬

我正在尝试开发一个将用于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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将CMake与Qt5和Qt插件一起使用

Qt5:如何将QPointer与Forward Declared类一起使用

将Laravel Forge与Bitbucket一起使用时的问题

在宏内将Qt4与CMake的find_package一起使用时出现问题

与Hazelcast中的EntryProcessor和MapListener一起使用时,IMap.unlock()中的性能问题

将“图表”和“渲染器”一起使用时,HighCharts的性能将大大降低

将`str.indexof`与`int2bv`一起使用时性能不佳

将Dalek与Grunt一起使用时的一般配置问题

将ScreeManager与Kivy-按钮布局一起使用时出现问题

将屁与批处理脚本一起使用时的问题。双斜杠和多次出现

将MAX()与表JOIN一起使用时出现问题

将肯定的SSL多站点证书与Java HttpsServer一起使用时出现问题

将Azure缓存服务(预览)与Azure网站一起使用时遇到问题

将 make_unique 与类的成员变量一起使用时遇到问题

将Passport-azure-ad OIDCStrategy与Passportjs一起使用时遇到问题

将Persistent的getJust与EntityIdToJSON一起使用时出现问题

将AsNoTracking与EntityFramework一起使用时出现问题

将样式化组件与复合组件模式一起使用时的依赖周期问题

将GridLayoutManager与RecyclerView一起使用时出现Admob问题

将 DATE_DIFF 与 MAX(DATE) 一起使用时的问题

将get_value与Boost的属性树一起使用时出现问题

将Firestore和Firebase身份验证/核心一起使用时出现问题

将 DNS 与 VPN 拆分隧道一起使用时出现问题。CentOS 8

将多个 KafkaProducerMessageHandler 与 spring 集成一起使用时出现问题

Postgres:将insert与select一起使用时出现问题

将autofs与NFS导出的挂载一起使用时出现防火墙问题

将 Socket.io 与 Pinia 一起使用时出现问题

将 std::find 与 std::string 数组一起使用时出现问题

将Postfix与Sendmail一起使用时出现问题