gpt4 book ai didi

python - Windows 中的 PyOpenGL glClearColor 错误,Linux 中正常

转载 作者:可可西里 更新时间:2023-11-01 10:43:10 25 4
gpt4 key购买 nike

我开发了一个基于 jupyter notebook 的 api,它似乎在 linux 中运行良好,但在 windows 中我遇到了这个错误,有些人认为这与没有绘制上下文有关,或者当时没有上下文调用了 glClearColor()。

不确定为什么 linux 环境可以处理它,但 jupyter 在 windows 中却没有。

有什么建议吗?这是 OpenGL 中的错误吗?

C:\Python27\biovis\biovis\biovis\glwindow.py in initializeGL(self)
132
133 if self.background=='black': GL.glClearColor(0.0, 0.0, 0.0, 1.0) # Black / White toggle switch
--> 134 if self.background=='white': GL.glClearColor(1.0, 1.0, 1.0, 1.0)
135
136 GL.glClearDepth(10.0) # same as default

C:\Users\cm\Anaconda2\lib\site-packages\pyopengl-3.1.1a1-py2.7.egg\OpenGL\platform\baseplatform.pyc in __call__(self, *args, **named)
400 def __call__( self, *args, **named ):
401 if self.load():
--> 402 return self( *args, **named )
403 else:
404 from OpenGL import error

C:\Users\cm\Anaconda2\lib\site-packages\pyopengl-3.1.1a1-py2.7.egg\OpenGL\error.pyc in glCheckError(self, result, baseOperation, cArguments, *args)
230 result,
231 cArguments = cArguments,
--> 232 baseOperation = baseOperation,
233 )
234 return result

GLError: GLError(
err = 1282,
description = 'invalid operation',
baseOperation = glClearColor,
cArguments = (1.0, 1.0, 1.0, 1.0)
)

编辑:

为了澄清上面添加的一些代码,调用链通过调用 Widget 的 GLWindow,Widget 依次加载一些数据并显式调用 initializeGL()、updateGL() 和 paintGL()。

调用 initializeGL() 时出现错误并且那里的函数都不起作用,也许小部件还没有准备好绘制?如果我评论那 3 个调用,小部件确实加载但未正确显示:屏幕是黑色的,只有在旋转它时我才能看到图形闪烁(旋转代码有它自己的 updateGL() 调用)。

我是不是在某处遗漏了一个 show(),或者调用函数的顺序不正确?但是为什么linux环境可以,而windows不行呢? (可能安装的模块版本略有不同?)

class GLWindow(QtGui.QWidget):

def __init__(self, fig, parent=None):
QtGui.QWidget.__init__(self, parent)

self.glWidget = GLWidget(fig, parent=self)

mainLayout = QtGui.QHBoxLayout()
mainLayout.addWidget(self.glWidget)

self.setLayout(mainLayout)
self.setWindowTitle(self.tr("Biovis"))

self.show()

class GLWidget(QtOpenGL.QGLWidget):

def __init__(self, fig, parent=None):
QtOpenGL.QGLWidget.__init__(self, parent)

self.setFocusPolicy(Qt.StrongFocus)
self.lastPos = QtCore.QPoint()

self.load_data_from_fig(fig)
format = QtOpenGL.QGLFormat()

format.setDoubleBuffer(True) # works fine
self.setFormat(format)

def load_data_from_fig(self, fig):

self.background = fig.background
...

self.initializeGL() #Can comment these out and code works, but, the screen is black and the figure flickers in/out of existence while rotating
self.updateGL()
self.paintGL()

def initializeGL(self):

GL.glClearColor(1.0, 1.0, 1.0, 1.0)
GL.glClearDepth(10.0) # same as default
GL.glEnable(GL.GL_DEPTH_TEST) #
...

最佳答案

下面是一个 pyqt4 opengl 演示,它在 windows 和 linux 上都成功地呈现了一个简单的三角形。请注意,我没有调用 self.paintGL() 或类似的任何东西,因为这些 *GL 命令是自动定义和调用的 pyqt 库。

import sys
import math
from PyQt4 import QtCore, QtGui, QtOpenGL
from OpenGL.GL import *

class Window(QtGui.QWidget):
def __init__(self):
super(Window, self).__init__()
self.glWidget = GLWidget()
mainLayout = QtGui.QHBoxLayout()
mainLayout.addWidget(self.glWidget)
mainLayout.setContentsMargins(0,0,0,0)
self.setLayout(mainLayout)
self.setWindowTitle("Biovis")

class GLWidget(QtOpenGL.QGLWidget):
def __init__(self, parent=None):
super(GLWidget, self).__init__(parent)

def minimumSizeHint(self):
return QtCore.QSize(200, 200)

def sizeHint(self):
return QtCore.QSize(400, 400)

def initializeGL(self):
glClearColor(1, 0, 0, 1)

def paintGL(self):
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
glBegin(GL_TRIANGLES)
glVertex(-1, -1, 0)
glVertex(0, 1, 0)
glVertex(1, -1, 0)
glEnd()

def resizeGL(self, width, height):
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
glViewport(0, 0, width, height)
glOrtho(-1, 1, -1, 1, -1, 1)
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()

if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())

让我知道这是否为您成功运行!

关于python - Windows 中的 PyOpenGL glClearColor 错误,Linux 中正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40123969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com