我正在试图制作2D实时情节。我试过修改qwt的示波器示例,尝试使用QGraphicsView和QPainter来达到高帧率绘图。我正在使用8个通道来绘制从rs232端口到达的数据。我每10毫秒采样一次。 也许我以错误的方式使用了QPainter,但我画得不是很快。使用qwt示例,在不更新整个屏幕时绘图速度很好,特别是在X11中使用Qt :: WA_PaintOutsidePaintEvent和Qt :: WA_PaintOnScreen。
现在我是QGLWidget的子类,我达到了可接受的速度。但我想知道我是否可以改进它。
每次我收到一个新点我存储它,并调用updateGL(); 在这种情况下,我只收到了y坐标,但是我将重新收回整个坐标。
void Plot::addPoint(int y)
{
points[t].x=t;
points[t].y=y;
t++;
updateGL();
}
在DrawGL()中,我检查线是否到达屏幕的末尾,如果是,则我擦除屏幕 如果没有,我只绘制线的新部分。
glBegin(GL_LINES);
glVertex2i( points[t-1].x, points[t-1].y);
glVertex2i( points[t-2].x, points[t-2].y);
glEnd();
我已禁用抖动和多重采样,我使用的是平面阴影。 我正在使用ortographic投影。
有什么方法可以更快地绘制?也许使用opengl进行离屏绘图并显示相应的像素图? 这是一个类似的项目吗?
答案 0 :(得分:1)
顶点缓冲区对象(可能还有显示列表)对此有帮助。基本上你需要一种减少GL调用次数的方法,它会变快。