Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 将图像显示与屏幕刷新率同步_Opengl_Pyqt_Pyqt4_Pyopengl - Fatal编程技术网

Opengl 将图像显示与屏幕刷新率同步

Opengl 将图像显示与屏幕刷新率同步,opengl,pyqt,pyqt4,pyopengl,Opengl,Pyqt,Pyqt4,Pyopengl,程序的功能:用于显示图像(简单的jpg/png文件) 目标:在屏幕上显示/绘制与屏幕刷新率同步的图像 我希望实现的伪代码示例: pixmap = set_openGL_pixmap(myPixmap) draw_openGL_pixmap(pixmap) doSomthingElse() 理想情况下,draw\u openGL\u pixmap(pixmap)功能只能在屏幕刷新并显示图像后返回。而doSomthingElse()将在真正绘制图像后立即执行 我到目前为止所做的尝试: 在

程序的功能:用于显示图像(简单的jpg/png文件)

目标:在屏幕上显示/绘制与屏幕刷新率同步的图像

我希望实现的伪代码示例:

pixmap = set_openGL_pixmap(myPixmap) 

draw_openGL_pixmap(pixmap) 

doSomthingElse()
理想情况下,
draw\u openGL\u pixmap(pixmap)
功能只能在屏幕刷新并显示图像后返回。而
doSomthingElse()
将在真正绘制图像后立即执行

我到目前为止所做的尝试

  • 在将pixmap设置为PyQt标签后使用:这似乎不太合适,因为它不处理与屏幕刷新率同步的问题
  • 使用即使这应该如文档所示,PyQt也不会在屏幕上绘制图像,直到调用,或者直到控件返回到应用程序的事件循环(即,当我调用的所有函数都已返回,GUI正在等待新事件)
  • 使用-即使图像是使用OpenGL小部件渲染的,但它只有在显示其父对象时才可见,因此实际显示时间仍然取决于事件循环
  • 使用-The
    repaint()
    方法将立即显示图像。但是,我不认为在调用
    repaint()
    时,它会等到屏幕刷新事件之后才返回
总结:
如何在发出命令的同时在屏幕上绘制图像(在小部件中),与屏幕刷新率同步,而不考虑事件循环。

多亏Trialarion对我的问题的评论,我找到了解决方案

对于任何感兴趣的人,以下是显示与屏幕刷新率同步的图像的python代码:

导入系统 从PyQt4.QtCore导入* 从PyQt4.QtGui导入* 从PyQt4.QtOpenGL导入* app=QApplication(sys.argv) #使用交换间隔设置为1的QGLFormat qgl_format=QGLFormat() qgl_格式.setSwapInterval(1) #使用上述格式构造一个QGLWidget qgl_widget=QGLWidget(qgl_格式) #设置计时器以每0毫秒调用updateGL() 更新\u gl\u timer=QTimer() 更新\u gl\u计时器。设置间隔(0) 更新\u gl\u timer.start() update\u gl\u timer.timeout.connect(qgl\u widget.updateGL) #设置图形视图和场景 grview=QGraphicsView() grview.setViewport(qgl_小部件) 场景=qgraphicscene() scene.addPixmap(QPixmap('pic.png')) grview.setScene(场景) grview.show() sys.exit(app.exec_())
另请参见@Triarion谢谢!这就成功了