15

私は現在、OpenGL を使用するコースに参加しており、これまですべてのプログラムで C を使用してきました。Fedora と OpenGL に Python をインストールしていますが、Python コードで OpenGL コマンドを呼び出すとすぐにセグメンテーション エラーが発生します。これがなぜなのかわかりません。

「C のみを使用する」というコメントを避けるために、Python を使用する理由を次に示します。

C から Python に切り替えたい理由はいくつかありますが、主な理由は、レイトレーサーの作成を開始しようとしていて、クラスを使用して簡単にしたいからです。私は C++ のクラスが嫌いで、C の構造体は少しクレイジーに思えるので、Python を試してみようと思いました。また、Python を久しぶりに使用する理由を探していました。

助けてくれてありがとう。

4

6 に答える 6

16

PyOpenGL の代わりにPygletの使用を検討することもできます。これは、ローカル プラットフォーム上のネイティブ OpenGL ライブラリの ctypes-wrapper であり、ウィンドウ サポートも備えています (GLUT を使用したいほとんどのものを処理する必要があります) 。pyglet-usersリストはかなりアクティブで非常に役立ちます。

于 2008-10-29T13:58:22.847 に答える
2

これらが元のポスターが使用しているライブラリであるかどうかはわかりませんが、PyOpenGL を使用して、私が取り組んでいるペット プロジェクト (C++ と Python を使用するグラフィックス エンジン) で同じ問題が発生しました。

PyOpenGL は、Python スクリプトがロードされた後に作成された場合、レンダリング コンテキストを正しく取得しませんでした (最初にスクリプトをロードし、次に C++ コードから Python メソッドを呼び出していました)。

Python スクリプトをロードする前に、ディスプレイを初期化し、OpenGL レンダリング コンテキストを作成すると、問題は発生しません。

于 2009-11-22T13:16:15.637 に答える
1

どの OpenGL ライブラリを使用していますか? どのウィンドウライブラリ? Python のバージョンは?

私が考えることができる最も可能性の高い原因は、ウィンドウ ライブラリ (SDL または使用しているもの) が、呼び出しを開始する前に OpenGL を初期化していないことです。

于 2008-10-28T02:34:02.010 に答える
0

おそらく、アクティブなOpenGLコンテキストを必要とするOpenGL関数を、コンテキストがなくても呼び出しているのでしょうか。必ずしもクラッシュするわけではありませんが、クラッシュする可能性があると思います。このようなコンテキストを設定する方法はプラットフォームによって異なり、PythonからGLを使用してからしばらく経ちました(使用したときは、問題を複雑にするGTK +も使用しました)。

于 2008-10-29T14:06:59.663 に答える
0

ランダムなセグメンテーション違反についてはどちらも考えていません。十分な情報がありません。openglに使用しているPythonライブラリは何ですか?どのように使用しますか?コードを見せていただけますか?それはおそらく些細なことですが、私の神のスキルは結局私にそれだけを伝えることになります。

Pythonのレイトレーサー?私はそれらの構造体を使ってCでそれを行うことを好みます。しかし、それでは、リアルタイムのレイトレーサーを実行するつもりはないと思います。

于 2008-10-28T06:12:11.633 に答える
0

スクリプトがセグメンテーション違反を引き起こすことはありません。ただし、最初にカーネルと kmod ビデオ ドライバーの動作プロパティを確認してください。拡張モジュールは「セグメンテーション フォールト」を引き起こす可能性があります。

于 2010-02-17T21:14:47.140 に答える