グラフィックス アプリ向けの高速でピクセル精度の 2D 描画 API?

StackOverflow https://stackoverflow.com/questions/67000

  •  09-06-2019
  •  | 
  •  

質問

クロスプラットフォームの描画プログラムを作成したいと考えています。アプリを作成するための 1 つの要件は、キャンバス上でピクセル レベルの精度があることです。たとえば、線描画アルゴリズムを他人に頼るのではなく、自分で書きたいと思っています。いかなる形式のアンチエイリアスも必要としません (やはり、ピクセル レベルの制御が必要です)。画面上でのユーザーの操作が迅速かつ応答性が高いことを望みます (高速アルゴリズムを作成できるまでは保留します)。

理想的には、これを Python で書きたいと思っていますが、第 2 の選択肢として Java を使用することもできます。最終的なアプリを簡単にクロスプラットフォームにできる機能は必須です。抽象化レイヤーを作成できる限り、必要に応じて、さまざまな OS 上のさまざまな API にサブミットします。何か案は?

補遺:絵を描く能力が必要です 画面上で. 。私が考え出したファイルに描画します。

役に立ちましたか?

解決

今週、ライブラリ pyglet を使用して Python から OpenGL を使用して 2D グラフィックスを実行するためのいくつかのスライドとデモ コードをまとめました。ここで私のものを見ることができます: http://tartley.com/?p=378

これは (Python としては比較的に) 非常に高速で、それぞれが約 50 個の頂点を持つ、独立して配置および配向された約 1,000 個のオブジェクトを画面上で移動させることができました。

これは非常に移植性が高く、この環境で書いたすべてのコードは、何も考えることなく Windows、Linux、Mac (さらには Pypy のような目立たない環境でも) で動作します。

アップデート: 同じトピックに関する新しい投稿もたくさんあります。 http://tartley.com/?cat=27

他のヒント

ピグレット Python 用のライブラリがニーズに合うかもしれません。これにより、クロスプラットフォーム グラフィックス API である OpenGL を使用できるようになります。アンチエイリアシングを無効にして、画面の領域をバッファまたはファイルにキャプチャできます。さらに、イベント処理、リソースの読み込み、および画像操作システムを使用することもできます。おそらく、これを PIL (Python Image Library) に結び付けることもできます。間違いなく、人気のあるクロスプラットフォームのベクター グラフィックス ライブラリである Cairo に結び付けることもできます。

純粋な PyOpenGL の代わりに Pyglet について言及したのは、Pyglet が多くの醜い OpenGL 要素を何の努力もせずに透過的に処理するためです。

私と友人は現在、Pyglet を使用した描画プログラムに取り組んでいます。いくつかの癖があります。たとえば、OS X では OpenGL は常にダブルバッファリングされるため、表示が更新されるたびに反転されるため、すべてを 2 回描画する必要があります。1 回目は現在のフレームで、もう 1 回は他のフレームです。現在の進捗状況をご覧いただけます このSubversionリポジトリ内で. 。(トランク内の Splatterboard.py は、実行したいファイルです。) svn の使用に慣れていない場合は、最新のソースの .zip を電子メールでお送りいたします。コードを調べる場合はご自由に盗んでください。

言語を選択できる場合は、Haxe で作成された Flash ファイルを使用できる可能性があります。Haxe は無料の完全な動的プログラミング言語です。そして、関連するNekoという、Mac、Windows、Linux上で動作する仮想マシン(Java、Ruby、Parrotなど)があります。ある意味、新しく改良された Flash 形式であるため、当然のことながら描画することができます。 http://haxe.org/

C++ を使用したい場合は、QT の Canvas と QPainter がこの作業に非常に適しています。そしてそれはクロスプラットフォームです。

QT 用の Python バインディングがありますが、私はそれを使用したことがありません。

Java に関しては、SWT を使用すると、キャンバスのピクセル レベルの操作がやや難しく、時間がかかるため、お勧めしません。一方、Swing の Canvas は非常に優れており、応答性が優れています。私は AWT オプションを使用したことがありませんが、おそらくそこに行きたくないでしょう。

私がお勧めします wxPython

これは見事にクロスプラットフォームであり、ピクセルごとのコントロールを取得でき、気が変わったら pyglet や agg などのライブラリで使用できます。

ドキュメントとデモのダウンロードでは、実行しようとしている内容に役立つ例がいくつか見つかります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top