同时使用pyglet和pyopengl的问题

0 投票
3 回答
704 浏览
提问于 2025-04-16 21:00

我有以下这段代码:

import pyglet
from OpenGL.GL import *
from OpenGL.GLU import *
class Window(pyglet.window.Window):
        def __init__(self,width,height):
            super(Window,self).__init__(width,height)

            glClearDepth(1.0)
            glDepthFunc(GL_LESS)
            glEnable(GL_DEPTH_TEST)
            glShadeModel(GL_SMOOTH)
            glMatrixMode(GL_PROJECTION)
            glLoadIdentity()

        def on_draw(self):
            glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
            glLoadIdentity()
            #I know this is deprecated      
            glTranslatef(0.0,0.0,-5.0)
            glColor3f(1.0,1.0,1.0)
            glBegin(GL_TRIANGLES)
            glVertex3f(0.0,0.0,0.0)
            glVertex3f(0.0,1.0,0.0)
            glVertex3f(1.0,0.0,0.0)
            glEnd()

        def on_resize(self,width,height):
            glViewport(0,0,width,height)
            glMatrixMode(GL_PROJECTION)
            glLoadIdentity()
            gluPerspective(45.0,float(width)/float(height),0.1,100.0)
            glMatrixMode(GL_MODELVIEW)

当我使用pyglet的OpenGL绑定时,一切都正常。但是,当我使用pyopengl时,我看到的只是一些乱七八糟的东西。

3 个回答

1

我可以确认,PyOpenGL和Pyglet是可以一起使用的。因为Python的OpenGL调用其实只是对同一个GL头文件和动态链接库的封装,它们都指向同样的函数。

我也可以确认,你的代码是可以渲染的。

我是在使用Pyglet的源代码,你可以尝试以下方法直接从代码库安装最新版本。

pip install hg+https://pyglet.googlecode.com/hg/

你需要先安装Mercurial。如果你在使用虚拟环境,可以直接使用:

pip install mercurial
1

我得同意Nicol的看法。每个程序都认为这个窗口是它的,所以只有一个程序能正确显示。你可以试试用PyOpenGL来创建窗口。另外,要获取Esc键的代码,可以这样写:
escape = chr(27)
祝你好运!

3

每个工具包都认为OpenGL窗口是属于他们自己的。实际上,只有一个工具包是对的,因此只有那个工具包才能正确地显示内容。

因为它们都可以使用OpenGL,所以在同一个程序中没有必要同时使用两个工具包。

撰写回答