15

コンピュータ グラフィックスのコースを開始する予定で、言語を選択する必要があります。

選択肢は C++ と Python の間です。私は C++ に問題はありません。python は進行中の作業です。だから私は、グラフィック部分に pyopengl を使用して、Python の道を進むことを考えていました。

聞いたことがありますが、パフォーマンスが問題です。

Python / pyopengl は C++ のパフォーマンスに挑戦できるほど成熟していますか?

私はそれが遠いショットであることを理解していますが、pyopenglの使用に関するあなたの考えや経験を聞きたいです.

4

5 に答える 5

30

コンピュータグラフィックスコースの内容に大きく依存します。私が過去に教えた入門コースのようなことをしている場合、基本的には立方体と球体を回転させ、テクスチャ マッピングと頂点アニメーションをいくつか行います。それだけです。この場合、非 Pythonic (そして、正直なところ、非 C++) OpenGL ステート マシン パラダイムを回避できると仮定すると、Python は完全に適切です。

行列の計算などには、Numpy を使用できます。Numpy のコアは C で記述されており、非常に高速です。起動と実行が速くなり、イテレーションも速くなり、おそらくもっと楽しくなります。

ただし、ハードコアで最先端の、シーンごとに何百万もの三角形、スキン、アニメーション、すべてのコンピューター グラフィックス コースを行っている場合は、C++ を使用してください。

あなたのクラスがあなたに選択肢を与えたのであれば、おそらく Python で問題ないでしょう。

ただし、コンピュータ グラフィックスの実際の仕事に知識を活用したい場合は、ほとんどすべてのゲームとグラフィックス エンジンが C または C++ で記述され、Python (または Lua) はスクリプト言語として残されています。

于 2010-03-22T00:36:01.240 に答える
7

Pythonは行く方法です。すべての opengl プログラミングはデータをビデオ カードの RAM にアップロードしてから、opengl を使用してデータを操作するため、Python の速度制限は意味がありません。また、ファイル、画像、サウンドなどを開くなど、C++ の難しい作業が簡単になります。

オクトリーを実装している上記の人に関しては、Cで書かれたnumpyを使用して実装することを妨げるものは何もありません。(また、構造のようなリンク内のオブジェクトへのポインターではなく、バイナリ ツリーのような線形メモリを使用していることを確認してください)

この件に関するブログ投稿

于 2010-12-15T04:55:54.027 に答える
7

これが私の個人的な経験です:

PyOpenGL について初めて聞いたとき、私は本当に興奮しました。私の好きな言語での OpenGL? 対処!そこで、3D グラフィックスのプログラミングを独学で学び始めました。

NeHeOpenGL SuperBibleなどのチュートリアルや本をいくつか読みました。PyOpenGL の機能は OpenGL 自体の機能と同じであるため(非常に小さな違いがあります)、ほとんどの例を複製することは難しくありませんでした。また、NeHe には、他の人が作成した Python のソース コードが多数あります。

それから間もなく (約 2 週間)、Quaternions について読み、Python で自分自身を実装しました。これで、完全な 3D カメラ操作オプションを備えた GLSL 対応環境ができました。シンプルな Phong シェーダーを作成し、Quaternions を使用してカメラの回転を制御しました。まだパフォーマンスヒットは1つもありません。

数か月後、私はこのコードに戻ってきました。

Python Octree の実装を試みましたが、8 レベル (256x256x256 ボクセル) に達したとき、計算に 2G 以上の RAM を使用し、数分後にはまだ完了していません。Python で多くのオブジェクトを格納すると、C++ のような単純な構造体だけではないことに気付きました。ここで、これを因数分解して C++ で記述し、Python 呼び出しで貼り付ける必要があることに気付きました。

これが完了したら、覚えていれば更新します。;]

(あなたの質問に答えると、いいえ、Python が C++ に取って代わることはありません。これら 2 つの言語は目的が異なり、強みも異なります。)

于 2010-04-24T14:25:34.140 に答える
2

Python は素晴らしい言語ですが、グラフィックには適したツールではありません。また、リモートで高度なことをしたい場合は、非 Pythonic ライブラリを使用する必要があり、Python で書かれた見苦しい C コードになってしまいます。

于 2010-03-21T21:24:17.197 に答える
0

Pythonは動的言語であり、実行時に解釈およびコンパイルされるため、C++よりも優れたパフォーマンスを発揮することはできません。いくつかのプログラミング言語の比較についてはこの投稿を参照してください。

C ++を好むもう1つの理由は、並列実行です。CGの多くのタスクは、並列で実行される複数のスレッドに分割することで最適化できます。Pythonを使用して新しいスレッドを開始しようとしたことがありますか?

于 2010-03-21T21:18:32.260 に答える