0

私は OpenGL を学び始めており、このチュートリアルでプログラムを実行しようとしました。これは、そのページからまとめたコードです。ラップトップでまったく実行できるようにするには、シェーダーの GLSL バージョンを下げる必要がありました (330 でした)。

from OpenGLContext import testingcontext
BaseContext = testingcontext.getInteractive()

from OpenGL.GL import *
from OpenGL.arrays import vbo
from OpenGLContext.arrays import *
from OpenGL.GL import shaders

class TestContext( BaseContext ):
    """Creates a simple vertex shader..."""

    def OnInit(self):

        VERTEX_SHADER = shaders.compileShader("""
            #version 130
            void main() {
                gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
            }
            """, GL_VERTEX_SHADER)

        FRAGMENT_SHADER = shaders.compileShader("""
            #version 130
            void main() {
                 gl_FragColor = vec4(0, 1, 0, 1);
            }""", GL_FRAGMENT_SHADER)

        self.shader = shaders.compileProgram(VERTEX_SHADER, FRAGMENT_SHADER)

        self.vbo = vbo.VBO(
            array( [
                [  0, 1, 0 ],
                [ -1,-1, 0 ],
                [  1,-1, 0 ],
                [  2,-1, 0 ],
                [  4,-1, 0 ],
                [  4, 1, 0 ],
                [  2,-1, 0 ],
                [  4, 1, 0 ],
                [  2, 1, 0 ],
            ],'f')
        )

    def render(self, mode):
        shaders.glUseProgram(self.shader)

        try:
            self.vbo.bind()
            try:
                glEnableClientState(GL_VERTEX_ARRAY)
                glVertexPointerf(self.vbo)

                glDrawArrays(GL_TRIANGLES, 0, 9)
            finally:
                self.vbo.unbind()
                glDisableClientState(GL_VERTERX_ARRAY)
        finally:
            shaders.glUseProgram(0)

if __name__ == "__main__":
    TestContext.ContextMainLoop()

これは、プログラムを実行すると発生するエラーです。表示される小さなウィンドウの上にマウスを移動すると、エラーが繰り返されるため、アプリは動作していますが、実際には機能していません。ウィンドウには、アプリの起動時に背後にあったものが表示されるため、実際の画像はありません。

Traceback (most recent call last):
  File "_ctypes/callbacks.c", line 314, in 'calling callback function'
  File "/usr/lib/python2.7/site-packages/OpenGLContext/events/glutevents.py", line 33, in glutOnMouseMove
    self.triggerPick()
  File "/usr/lib/python2.7/site-packages/OpenGLContext/context.py", line 590, in triggerPick
    self.OnDraw()
  File "/usr/lib/python2.7/site-packages/OpenGLContext/context.py", line 515, in OnDraw
    visibleChange = self.renderPasses( self )
  File "/usr/lib/python2.7/site-packages/OpenGLContext/passes/renderpass.py", line 866, in __call__
    return FLAT( context )
  File "/usr/lib/python2.7/site-packages/OpenGLContext/passes/flatcompat.py", line 298, in __call__
    self.setViewPlatform( vp )
  File "/usr/lib/python2.7/site-packages/OpenGLContext/passes/flatcompat.py", line 334, in setViewPlatform
    self.projection = vp.viewMatrix().astype('f')
  File "/usr/lib/python2.7/site-packages/OpenGLContext/move/viewplatform.py", line 158, in viewMatrix
    inverse=inverse,
  File "tmatrixaccel.pyx", line 55, in vrml_accelerate.tmatrixaccel.perspectiveMatrix (src/tmatrixaccel.c:1990)
TypeError: perspectiveMatrix() got an unexpected keyword argument 'inverse'

私は OpenGL に関してはまったくの初心者なので、コードから直接ではなく、何らかのコールバックによって問題を探し始める場所が本当にわかりません。どういうわけか互換性のないパッケージがありますか?

私のバージョン:

Python 2.7.5 (default, Oct  8 2013, 12:19:40) 
[GCC 4.8.1 20130603 (Red Hat 4.8.1-1)] on linux2

PyOpenGL                  - Standard OpenGL bindings for Python
  INSTALLED: 3.1.0a3 (latest)

OpenGLContext             - Demonstration and testing contexts for PyOpenGL/OpenGL-ctypes
  INSTALLED: 2.2.0a3 (latest)

PyOpenGL-accelerate       - Acceleration code for PyOpenGL
  INSTALLED: 3.1.0a3 (latest)

OpenGLContext-full        - Installs all of OpenGLContext with optional dependencies
  INSTALLED: 2.1.0a9 (latest)
4

1 に答える 1

2

エラーは、コードではなく、使用されているライブラリの 1 つのバグです。基本的に、Python は、perspectiveMatrix呼び出される方法が好きであり、関数の実際のシグネチャと一致しないことを示します。

使用するライブラリの作成者にバグ レポートを提出する必要があります。

于 2013-11-08T16:11:41.967 に答える