- 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/
我很难理解为什么我用 openGL 做的窗口保持黑色。 我没有看到我在代码中哪里出错了: import com.jogamp.opengl.awt.GLCanvas import com.jogamp
我开始了 sdl 和 opengl 类(class)。当我尝试更改背景时遇到一个问题,此功能没有给出任何结果。我使用 MSVS 和 Win8.1。我正在尝试使用各种带参数的选项。我总是有黑色背景。有什
我正在将 GLES2 和 EGL 与 PyOpenGL 一起使用,我正在调用 glClearColor(0.0, 0.0, 0.0, 1.0) .后 glClear(GL_COLOR_BUFFER_B
我是 LWJGL 和 OpenGL 的新手,我已经进行了一些谷歌搜索,但似乎找不到任何与此相关的其他内容。 我制作了一个基本的测试程序来创建一个空白窗口。我可以创建窗口并正常运行应用程序,但如果我尝试
glViewport(x(), y(), width(), height()); glDisable(GL_DEPTH_TEST); glClearColor(0, 0.3, 0, 1); glCle
我正在开发一个简单的 OpenGL 应用程序,它允许用户通过单击并向左(使其不那么强烈)或向右(更加强烈)拖动来调整简单窗口的背景颜色。例如,当向右拖动时,我有这样的结果: intensity +=
我正在尝试在 C++ 中运行我的第一个 opengl 程序,它会在 Mac OS X 上的终端打开一个窗口、设置背景颜色并给出标题。 代码可以正常编译和链接。当我运行该程序时,窗口和标题可以正常打开,
gl.glClearColor(0f, 0f, 0f, 1.0f); 如何阅读?如: set clear color 或 clear the color ? 最佳答案 @Mikola 的回答是正确的,
我正在尝试创建一个单独的 OpenGL 窗口,其中包含在 RGB 颜色选择器中选择的一些背景颜色,但看起来我在这个函数中遗漏了一些重要的东西。当我想将颜色设置为标准时,例如红色,它可以工作。 glCl
我只是想绘制背景,用 0.5f 透明黑色覆盖它以使其变暗,并在其顶部渲染暂停菜单。 我已经尝试过: Gdx.gl.glClearColor(0f, 0f, 0f, 0.5f); Gdx
从 paintGL() 之外的各个地方调用 glClearColor 时,我遇到了一个小问题。目的是让用户能够即时设置清晰的颜色,但这不会按计划工作,除非在 paintGL 中的每一帧调用 glCle
我想在运行时更改我的应用程序的背景颜色。所以在单击按钮时我首先调用: GLES20.glClearColor(color[0], color[1], color[2], color[3]); 然后我调
我有一个QMainWindow,里面有一个QGLWidget。我希望小部件显示我自己选择的“清晰”颜色,而不是默认的黑屏。 void MyQGLWidget::initializeGL(void) {
我一直在努力理解 glReadPixels 的输出,这在理论上似乎很简单,但实际上会产生令人费解的(至少对我而言)结果。 假设我有一个简单的片段着色器,它绘制一个颜色值为 vec4(0.2, 0, 0
在 OpenGL 中,为了获得适当的透明度效果,我应该使用 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)但是使用该混合函数 glClearColo
搜索 this question 答案的结果,我遇到了一个相当不舒服的发现。 似乎仅以 60 fps 渲染 glClearColor() 会使 iPhone 的渲染利用率达到 27%。 这意味着,几乎
我有一个名为 renderLoop 的方法,它将处理我所有的绘图。当我运行该程序时,出现此异常。这个异常到底是什么以及如何修复它? 当我从此类外部的函数回调(framebuffer_size_call
我开发了一个基于 jupyter notebook 的 api,它似乎在 linux 中运行良好,但在 windows 中我遇到了这个错误,有些人认为这与没有绘制上下文有关,或者当时没有上下文调用了
在应用程序的res/values/colors.xml 文件中,红色定义为#AARRGGBB 格式: #ffff0000 如何将此颜色用作 glClearColor 和其他 OpenGL ES
我是第一次尝试使用 OpenGL。我在网上查看了一些代码,然后尝试编写自己的代码,但我总是得到一个空的(透明的)窗口。 (我是用GLUT开窗的)。 我以为我做错了什么,所以我从here复制了代码到我的
我是一名优秀的程序员,十分优秀!