2012-03-24 11 views
2

私はpygletを使用してpythonで3D視覚化を行っており、いくつかのピッキングを行うためにモデルビューと投影行列を取得する必要があります。glGetFloatvを使用してpygletのmodelview行列を取得する

from pyglet.gl import * 
from pyglet.window import * 

win = Window(fullscreen=True, visible=True, vsync=True) 

私はその後、私の窓のすべてのイベントを定義します:私はクリックすると

@win.event 
def on_draw(): 
    # All of the drawing happens here 

@win.event 
def on_mouse_release(x, y, button, modifiers): 
    if button == mouse.LEFT: 

    # This is where I'm having problems 
    a = GLfloat() 
    mvm = glGetFloatv(GL_MODELVIEW_MATRIX, a) 
    print a.value 

は、それが印刷されます...

1.0 
Segmentation fault 

とクラッシュ私が使用して私の窓を定義します。 GL_MODELVIEW_MATRIXを使ってglGetFloatvを呼び出すと、16個の値が返されるはずです。私は= GLfloat * 16を定義しようとしましたが、次のエラーが表示されます。

ctypes.ArgumentError: argument 2: <type 'exceptions.TypeError'>: expected LP_c_float instance instead of _ctypes.PyCArrayType 

これらの行列はどのように取得できますか?

答えて

5

16要素フロート配列を渡す必要があります。これを行うには、次のコードを使用してください:

a = (GLfloat * 16)() 
    mvm = glGetFloatv(GL_MODELVIEW_MATRIX, a) 
    print list(a) 

もちろん、[0]構文を使用して "a"の個々の要素にアクセスできます。

+0

完璧に作業しました、ありがとうございます。 – user1223904

+0

あなたは?の16の要素の解釈を共有できますか?どの要素が何を表していますか? – vipin8169

+0

コラムメジャー、私の理解ごとに。最初の4つは行列の最初の列です。 –

関連する問題