我正尝试在macOS上使用OpenGl和python。当我从教程中运行代码时,我得到了错误:
GLUT警告:以下是GLUT 3.0的新检查;更新你的 码。
GLUT致命错误:窗口1需要重新显示,但没有显示 回调。
我尝试运行的代码:
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB)
glutInitWindowSize(300, 300)
glutInitWindowPosition(50, 50)
glutInit(sys.argv)
glutCreateWindow(b"Happy New Year!")
glutMainLoop()
There's already a question about this problem on Stack Overflow,但未对此问题给出明确答案。据我了解,我应该添加
glutDisplayFunc(glutCreateWindow)
glutMainLoop()
但是,如果这样做,我会收到另一个错误:
TypeError:此函数至少接受1个参数(给定0个参数)
怎么了?
答案 0 :(得分:1)
glutMainLoop
运行事件处理循环。这样做时,将调用glutDisplayFunc
设置的回调函数。您必须实现并设置此功能:
例如
def display:
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
# do the drawing
# .....
glutSwapBuffers()
glutPostRedisplay()
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB)
glutInitWindowSize(300, 300)
glutInitWindowPosition(50, 50)
glutInit(sys.argv)
glutCreateWindow(b"Happy New Year!")
glutDisplayFunc(display)
glutMainLoop()
请注意,glutPostRedisplay
将当前窗口标记为需要重新显示,这将导致该窗口连续地重新显示。 glutSwapBuffers
交换当前窗口的缓冲区,这意味着它使图形在视口中“可见”。