0

次のコードがあります。

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 を使用すると、ごちゃごちゃした混乱しか表示されません。

4

3 に答える 3

2

各ツールキットは、OpenGLウィンドウが自分自身に属していると信じています。そのうちの1つだけが正しいため、正しくレンダリングできるのは1つだけです。

どちらもOpenGLを公開しているため、同じプログラムで両方を使用しようとする理由はありません。

于 2011-07-07T06:57:20.510 に答える
1

PyOpenGL と Pyglet が連携して動作することを確認できます。python opengl 呼び出しは、アドレス空間内の同じ GL ヘッダー/dll への単なるラッパーであるため、それらはすべて同じ関数にリダイレクトされます。

コードがレンダリングされることも確認できます。

ソースから Pyglet を使用しています。リポジトリ HEAD から直接インストールするには、次の手順を試してください。

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

Mercurial をインストールする必要があります。virtualenv を使用している場合は、次のように簡単に使用できます。

pip install mercurial
于 2013-02-19T07:48:16.427 に答える
1

私はニコルに同意しなければなりません。それぞれがウィンドウが自分に属していると考えているため、正しくレンダリングできるのは 1 つだけです。PyOpenGL でウィンドウを作成して、Escape のキーコードを取得してみてはいかがでしょうか:
escape = chr(27)
頑張ってください!

于 2012-12-08T20:58:04.563 に答える