【问题标题】:NameError when running pyglet运行 pyglet 时出现 NameError
【发布时间】:2016-10-04 14:26:38
【问题描述】:

我正在尝试做我的 uni 项目,我正在使用 pyglet 来完成任务。这是让我遇到问题的代码的一部分。

from pyglet.gl import *
from pyglet.window import key
from pyglet.window import mouse


window=pyglet.window.Window(resizable=True)

@window.event
def on_draw():

    glutInitDisplayMode (GLUT_RGB | GLUT_DOUBLE)
    glutInitWindowSize (width, height)
    glutInitWindowPosition (100, 100)


    glClearColor( 1.0, 1.0, 1.0, 1.0)
    glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
    myObject ()
    glutSwapBuffers() 

当我搜索函数 glutInitDisplayModeglutInitWindowSizeglutInitWindowPosition 时,它只显示 pyOpenGL 线程,那么它们是否存在于 pyglet 或我只是定义错误?

终端输出:

glutInitDisplayMode (GLUT_RGB | GLUT_DOUBLE)

NameError:未定义全局名称“glutInitDisplayMode”

其他两个也一样

【问题讨论】:

    标签: python python-3.x nameerror pyglet pyopengl


    【解决方案1】:

    所以,glutInitDisplayMode 是一个 GL 函数,但据我所知,Pyglet 并没有提供它,因为它并不是真正需要的。

    现在,这些是一些猜测,如果我错了,请纠正我。
    但是调用以下命令将为您设置上下文:

    pyglet.window.Window(...)
    

    所有这些都是不必要的:

    glutInitDisplayMode (GLUT_RGB | GLUT_DOUBLE)
    glutInitWindowSize (width, height)
    glutInitWindowPosition (100, 100)
    

    相反,你想做的是:

    window = pyglet.window.Window(width=800, height=600)
    window.set_location(100, 100)
    

    还有创建特定配置和上下文并注入的选项:

    config = pyglet.gl.Config(double_buffer=True)
    context = context = config.create_context(shared_context)
    window = pyglet.window.Window(config=config, context=context)
    

    希望这对您有所帮助。

    【讨论】:

    • @smrkelj 啊,看你怎么导入Config,在pyglet.gl.Config下面 --> <class 'pyglet.gl.win32.Win32Config'>
    • 我已经使用了这个代码:config = gl.Config(double_buffer=True) context = context = config.create_context(shared_context) window = pyglet.window.Window(config=config, context=context) 然后我得到了这个错误:第 29 行,在 config = gl.Config(double_buffer=True) AttributeError: 'module' object has no属性 'Config' 所以我用这个改变了它:context = window.context config = context.config config.double_buffer window = pyglet.window.Window(config=config, context=context, display=display) 我会因为这个改变而失去任何东西,还是一样?
    • @smrkelj 通常你根本不需要context,Pyglet 会为你做这些事情。如果您希望自己创建一个上下文并在 Windows 等之间共享它,那就更重要了。请参阅我更新的答案 + 我上面关于 gl.Config() 的评论。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-14
    • 1970-01-01
    • 1970-01-01
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多