- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我开发了一个基于 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/
我有一个在 blender 中创建的 3-D 对象。我想从 blender 中导出它并能够将它导入到 OpenGL 中。是否有为此过程推荐的方法或特定的文件扩展名? 最佳答案 来自 Here: 使用
我正在尝试使用 pillow 加载图像在 OpenGL 中绘制二维图像,但是当我在 OpenGL 中渲染它时,图像是倾斜的。 这是原始图像: 加载.png 这是代码: # -*- coding: ut
我正在尝试使用 pyopengl 创建一个简单的场景,但我不断收到运行时错误。我正在使用 glfw 来显示 opengl 场景。 我使用 python 是因为我想在其他一些 python 项目中包含
我遇到一个奇怪的问题,我试图使用两个不同的 VBO 并使用 glDrawArrays()。然而,尽管 VBO 数据不同,但 glDrawArrays() 绘制的图形完全相同 import ctypes
我从特定的角度(使用 View 和投影矩阵)绘制了一个特定的场景。我使用了三角形的 VBO 等等。我可以使用以下方法获取图像的 RGB: data = glReadPixels(0, 0, width
所以我只是测试一下我的引擎中的工作原理,并尝试简单地使用以下命令来旋转对象。 rot_y = Matrix44.from_y_rotation(glfw.get_time() * 0.5) 但是...
我有一个需要快速渲染的场景。所以我成功地将三角形的顶点生成为 numpy,上传到 GPU 并以非常快的速度渲染它。到目前为止一切顺利。 当场景中的某些元素需要从场景中消失时,问题就开始了。我所做的就是
所以我有一个问题,我已经追了几天了,但找不到任何帮助。我刚刚开始尝试学习 pyOpenGL 并很快遇到了这个问题。我希望我已经包含了足够的信息,感谢您的帮助。 问题: 当我绘制一个立方体时,后面的一些
我正在进行 PyQt5 PyOpenGL 项目。我正在尝试用一堆彩色实心立方体绘制一个白色线框立方体。线框立方体是从元组点列表以及对这些点的元组引用列表中绘制的。实心立方体是从对点的元组引用列表中绘制
我尝试了一切,但仍然没有得到我的错误。我正在尝试在我的球体对象上放置纹理。 """ Minimal texture on sphere demo This is demo for showing ho
我对 PyOpenGL 比较陌生,并开始学习转换以及模型、 View 和投影矩阵。一切都很好,直到我编译并运行我的代码,发现我的对象突然消失了,说实话,我不知道 OpenGL 是否正在裁剪我的对象,或
经过一些建议,我决定用困难的方式学习一点 OpenGL。我尝试将一个 (float - 名为 myAttrib) 变量传递给顶点着色器,它似乎有效(第 33 行),但显然不起作用't。稍后我想将代码分
好吧,感谢你们,我对OpenGL在(几乎)现代工作中的了解有了更深入的了解。但有件事我想不通。 即使我错过了正确设置的片段着色器如何对我的纹理进行采样?我认为采样器会以某种方式自动获取纹理。但如何呢?
我的问题是我的程序显示一个具有 120-fps 限制的简单立方体只能以 25 fps 运行。我发现所有性能损失都在 OpenGL 部分,但我无法弄清楚具体位置。 我的问题是: OpenGL 在 Pyt
这个问题在这里已经有了答案: What is the proper way to modify OpenGL vertex buffer? (3 个答案) 关闭 2 年前。 我想在 PyOpenGL
所以我一直在绞尽脑汁地不停地试错。我觉得我总是带着关于同一件事的问题回来,这令人沮丧。 我正在按照教程查看 C++ 代码,并跟随 Python 尝试复制结果。我注意到通过反复试验存在细微差别,并且我在
出现包含GLUT图形的窗口后,我想在终端输入: user@computer: python woop.py # Now displaying a beautiful landscape (cmd):
我刚刚开始学习 pyOpenGL 并遇到了一个问题,我的第一个项目非常简单:我试图打开一个窗口并使用着色器绘制一个简单的三角形。我使用 glfw 创建窗口,所有内容都正确编译,但未绘制三角形。 我的主
我使用了Python Imaging Library来加载.ttf字体。这是代码: self.rect = Image.new("RGBA", (600,100), (255,255,255)) se
我正在尝试用 Pygame 创建一个 2D python 游戏。 但我意识到我可以使用 PyOpengl,所以我尝试学习如何使用它。我可以在我的屏幕上用顶点创建一个三角形 strip 。但是,我想使用
我是一名优秀的程序员,十分优秀!