25

私はopenGLとPythonをいじり回そうとしていますが、PyOpenGlとpygletを使用する正当な理由を見つけることができませんでした

どちらをお勧めしますか?その理由は?

4

9 に答える 9

32

トニーが言ったように、これは本当にあなたの目標に依存するでしょう. OpenGL や 3D レンダリング全般について学習しようと「いじくり回している」場合、私はすべての楽しみを省いて PyOpenGL で作業を開始します。これは、Python を使用して「生の」3D プログラミングに到達するのと同じくらい近いものです。 .

一方、ゲームやマルチメディア アプリケーションをモックアップする方法で「いじくり回している」場合、または一般的なプログラミング手法について学習しようとしている場合は、Pyglet が入力イベントのフックを提供することで、事前の開発時間を大幅に節約できます。 、サウンド、テキスト/ビルボードなど。多くの場合、この先行投資は、人々がプロジェクトを完了するのを妨げるものです。(車輪の再発明を避けることも非常に Pythonic です。)

なんらかの重荷を持ち上げる作業を検討している場合 (これは通常、私の「いじくり回し」の定義から外れますが、3D エンジンの設計をいじくり回している場合は当てはまらない可能性があります)、Python-Ogre を参照することをお勧めします。は、非常にフル機能で堅牢なOGRE 3Dグラフィック エンジンをラップします。

于 2008-11-11T04:03:04.397 に答える
32

ピグレットから始めます。ウィンドウを開くことから、フレンドリーで強力な Sprite および Batch クラスを使用してスプライトおよび OpenGL プリミティブを描画することまで、開始するために必要なすべてを含む最高の高レベル API が含まれています。

後で、glDrawArrays などの OpenGL 関数を直接呼び出す独自の低レベル コードを作成することもできます。これは、pyglet の OpenGL バインディングまたは PyOpenGL を使用して行うことができます。良いニュースは、どちらを使用しても、そのような呼び出しを既存の pyglet アプリケーションの途中に挿入することができ、それらは「そのまま機能する」ということです。コードを Pyglet から PyOpenGL に移行するのはかなり簡単なので、事前にあまり心配する必要がある決定ではありません。2 つの間のトレードオフは次のとおりです。

PyOpenGL のバインディングにより、OpenGL インターフェースがより使いやすく Pythonic になります。たとえば、頂点配列をさまざまな形式、ctypes 配列、numpy 配列、プレーン リストなどで渡すことができ、PyOpenGL はそれらを OpenGL が使用できるものに変換します。このような機能により、PyOpenGL は非常に簡単で便利になります。

pyglet の OpenGL バインディングは自動的に生成され、PyOpenGL ほど使いやすくありません。たとえば、「C ポインター」の種類の引数を OpenGL に渡すために、手動で ctypes オブジェクトを作成する必要がある場合があります。これは面倒です。ただし、プラス面は、pyglet のバインドが大幅に高速になる傾向があることです。

これは、最適な中間点があることを意味します。つまり、ウィンドウ、マウス イベント、サウンドなどに pyglet を使用します。次に、OpenGL 関数を直接呼び出したい場合は、PyOpenGL の使いやすい API を使用します。次に、最適化するときに、内部レンダー ループ内にあるパフォーマンス クリティカルな PyOpenGL 呼び出しのごく一部を、同等の pyglet に置き換えます。私の場合、これによりフレームレートが 2 倍から 4 倍高速になり、コードの 90% で PyOpenGL が便利になりました。

于 2010-11-22T14:21:04.330 に答える
15

ModernGLを試してください。

pip install ModernGL
  • PyOpenGLは、元の OpenGL API (SWIG で生成) の自動生成バージョンです。元の OpenGL API は Python に適していません。生成された Python バインディングは使いにくいです。

  • pygletは主にウィンドウの作成とイベント処理用ですが、PyOpenGL のような API (たとえばpyglet.gl.glClearColor)を使用できます。

  • pygameは、レンダリングを行うために PyOpenGL を使用できるウィンドウを提供します。

  • ModernGLは PyOpenGL の優れた代替手段です。より少ないコードで最新の OpenGL API を使用できます。ModernGL はそれ自体ではウィンドウを作成しませんが、それをpygletpygamePyQt5、さらにはGLUTに統合できます。編集moderngl-window を使用してウィンドウを個別に作成できるようになりました。 pip install moderngl-window

ModernGL では、1 回の呼び出しで簡単なシェーダー プログラムを作成できます。

prog = ctx.program(
    vertex_shader='''
        #version 330
        in vec2 in_vert;
        void main() {
            gl_Position = vec4(in_vert, 0.0, 1.0);
        }
    ''',
    fragment_shader='''
        #version 330
        out vec4 f_color;
        void main() {
            f_color = vec4(0.3, 0.5, 1.0, 1.0);
        }
    ''',
)

ModernGL を使用すると、OpenGL API を完全に制御できます。

于 2016-07-06T18:31:05.610 に答える
6

Pyglet は実際には PyOpenGL よりも進化していると言えます。独自の優れた API があり、pyglet.gl モジュールを介してアクセスされる OpenGL の完全なラッパーがあります。PyOpenGL は、OpenGL が持つすべての関数をラップするわけではありません。Pyglet には、OpenGL によるハードウェア アクセラレーションを使用して 2D をレンダリングするための優れたライブラリもあり、非常によくできています。

強力な既製の 3D エンジンが必要な場合は、Ogreなどがあります。

于 2009-01-03T12:25:09.487 に答える
4

うーん、私はピグレットを提案します、それは本当にゲームやアプリケーションに必要なすべてを提供します。

念のために言っておきますが、pygletがPyOpenGLで行う多くのことを実行できます。たとえば、ウィンドウを作成するために必要なのは、
glutInitWindow(title)だけです。

その前にglutInitDisplayModeを呼び出す必要があると思いますが。

簡単な要約:泣くまでコーディングしたくない場合はpygletを選択しますが、マスターになりたい場合はPyOpenGLを選択します。http://pyopengl.sourceforge.netにアクセスしてPyOpenGLのドキュメントを読み、 http: //pyglet.orgにアクセスしてpygletのドキュメントを読んでください。これがお役に立てば幸いです。

于 2012-12-08T20:30:29.070 に答える
4

pyglet には、多くの優れた追加機能が含まれています (画像の読み込みやサウンドなど)。始めたばかりなら、まず pyglet を試してから、金属に近づきたい場合は PyOpenGL に切り替えます。

ただし、本当に重要な質問は、何を達成しようとしているのかということです。

于 2008-11-11T03:38:00.093 に答える
4

pyglet の GL API は、PyOpenGL ほど優れたものではありません。pyglet は未加工の ctypes レイヤーにあるため、ctypes についても学習する必要があります。たくさんの OpenGL プログラミングを計画している場合は、PyOpenGL を使用することをお勧めします。

良い点は、2つをうまく混ぜることができることです。pyglet を使用して、GL コンテキスト、サウンド、イベント、画像の読み込みとテクスチャの管理、テキストのレンダリングなどを提供します。実際に必要な OpenGL プログラミングには PyOpenGL を使用します。

于 2010-03-07T11:17:49.600 に答える
4

私が pyglet を推進しているのは、このようなものでこれまでに見た中で最も優れた API があるからです。

Pyglet には opengl API もあります。しかし、最近追加された頂点リストのサポートを使用する方が良い場合がよくあります。

pyglet.gl

于 2008-11-11T16:30:11.843 に答える
3

Pygletをお勧めします。これは、開始が非常に簡単で、基本的な実行が可能であり、その後、自分のペースでより高度なテクニックを追加できるためです。

于 2008-12-29T02:52:47.673 に答える