加速 2d 绘图
我正在尝试制作 2D 实时绘图。我尝试修改qwt的示波器示例,尝试使用QGraphicsView和QPainter来达到高帧率绘图。我使用 8 个通道来绘制来自 rs232 端口的数据。我每 10 毫秒采样一次。 也许我以错误的方式使用了 QPainter,但我画得不是很快。对于 qwt 示例,在不更新整个屏幕的情况下,绘图速度很好,尤其是在使用 Qt::WA_PaintOutsidePaintEvent 和 Qt::WA_PaintOnScreen 的 X11 中。
现在我正在对 QGLWidget 进行子类化,并且达到了可接受的速度。但我想知道我是否可以改进它。
每次我收到一个新点时,我都会存储它,并调用 updateGL(); 在这种情况下,我只收到 y 坐标,但我将收到整个坐标对。
void Plot::addPoint(int y)
{
points[t].x=t;
points[t].y=y;
t++;
updateGL();
}
在 DrawGL() 中,我检查线条是否到达屏幕末端,如果为 True,则擦除屏幕 如果没有,我只画线的新部分。
glBegin(GL_LINES);
glVertex2i( points[t-1].x, points[t-1].y);
glVertex2i( points[t-2].x, points[t-2].y);
glEnd();
我已经禁用了抖动和多重采样,并且我正在使用平面阴影。 我正在使用正射投影。
有什么方法可以画得更快吗?也许使用 opengl 进行离屏绘图并显示相应的像素图? 有类似的项目吗?
I'm triying to make a 2D real-time plot. I've tried with modifying the osciloscope example of qwt, tried to use QGraphicsView, and QPainter to reach high framerate drawing. I'm using 8 channels to plot data wich is arriving from a rs232 port. I take a sample every 10 ms.
Maybe i've used the QPainter in a wrong way, but i couldn't draw very fast. With the qwt example, in wich doesn't update the whole screen the drawing speed was good, especially in X11 with Qt::WA_PaintOutsidePaintEvent and Qt::WA_PaintOnScreen.
Now i'm subclassing the QGLWidget, and i'm reaching a acceptable speed. But i'm wondering if i could improve it.
Every time I recived a new point i stored it, and the call updateGL();
In this case i recived only the y coordinate, buth i'm going to recive the whole pair.
void Plot::addPoint(int y)
{
points[t].x=t;
points[t].y=y;
t++;
updateGL();
}
In DrawGL() i check if the line reach the end of the screen, if is True i erase the screen
if not, i draw only the the new part of the line.
glBegin(GL_LINES);
glVertex2i( points[t-1].x, points[t-1].y);
glVertex2i( points[t-2].x, points[t-2].y);
glEnd();
I've disabled the Dithering and multisampling, and i'm using flat shades.
i'm using an ortographic projection.
is there some way to draw faster? maybe using opengl for off-screen drawing and the showing the corresponding pixmap?
is the a project similar to this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
顶点缓冲区对象(也许还有显示列表)将对此有所帮助。基本上,您需要一种减少 GL 调用次数的方法,并且速度会变得更快。
Vertex buffer objects (and perhaps display lists) would help this. Basically you need a way of reducing the number of GL calls you make, and it'll get fast.