質問

C# でグラフィックスをレンダリングする別の方法はありますか GDI+ そして XNA?

(タイルマップエディターの開発用)

役に立ちましたか?

解決

SDL.NET 私が気に入っているソリューションです。その上に 3D が必要な場合は、Tao.OpenGL を使用して内部をレンダリングできます。業界標準で高速です (SDL, 、つまり)、クロスプラットフォームです。

他のヒント

はい、DirectX 9.0 をラップし、ビデオ サーフェスのピクセル レベルの直接操作を提供する Windows フォーム コントロールを作成しました。

実際、私は Stack Overflow に別の投稿を書き、他にもっと良いアプローチがあるかどうかを尋ねました。 安全でない C# と 2D レンダリング用のポインター、良いのか悪いのか?

比較的高性能ですが、ポインタを使用してメモリに効率的にアクセスするため、安全でないコンパイラ オプションが必要です。それがこの以前の投稿の理由です。

これは必要な手順の概要です。

  1. DirectX SDK をダウンロードします。
  2. 新しい C# を作成する Windows フォーム インストールされているMicrosoft DirectXアセンブリをプロジェクトと参照します。
  3. 必要なプレゼンテーションパラメーター(ウィンドウ、バックバッファリングなど)を使用して、新しいDirectXデバイスオブジェクトを初期化します。
  4. 表面の「ピッチ」と現在のディスプレイモード(ピクセルあたりのビット)を記録するように注意して、デバイスを作成します。
  5. 何かを表示する必要があるとき、 Lock バックバッファー表面と、表面メモリの開始まで返されたポインターを保存します。
  6. ポインター算術を使用して、表面ピッチ、ピクセルあたりのビット、および実際のx/yピクセル座標に基づいてデータの実際のピクセル位置を計算します。
  7. 私の場合はわかりやすくするために 32 bpp に固定しています。つまり、ピクセルの設定は次のように簡単です。*(surfacePointer + (y * ピッチ + x))=Color.FromARGB(255,0,0);
  8. 描き終わったら、 Unlock バックバッファ面。表面を提示します。
  9. 必要に応じて手順 5 から繰り返します。

このアプローチを採用する場合は、ターゲット サーフェスの現在の表示モード (ピクセルあたりのピッチとビット数) を注意深く確認する必要があることに注意してください。また、プログラムの実行中にウィンドウのサイズ変更や画面形式の変更に対処する戦略を立てる必要もあります。

  • より高速な 3D グラフィックスを実現するマネージド DirectX (Microsoft.DirectX 名前空間)。これは、DirectX API に対する堅牢な .NET ラッパーですが、.NET オブジェクトの作成とマーシャリングのパフォーマンスに多少の影響を及ぼします。フル機能を備えた最新の 3D エンジンを作成している場合を除き、問題なく動作します。

  • Window Presentation Foundation (WPF) (Windows.Media 名前空間) - 2D グラフィックスに最適です。3D 機能も制限されています。Windows フォームをベクトル、ハードウェア アクセラレーションによる解像度に依存しないフレームワークに置き換えることを目的としています。非常に便利で、いくつかの種類のカスタム コントロール、リソース、データ バインディング、イベント、コマンドをサポートしています...いくつかの奇妙な点もあります。速度は通常、GDI より速く、DirectX より遅く、やり方に大きく依存します (賢明な方法で書き換えると 60 倍速く動作するものが確認されました)。私たちは、リアルタイムのインジケーター、グラフ、プロットを満載した 3 つの 1280x1024 画面を 1 台の (最高ではない) PC に実装することに成功しました。

Visual Studio や Expression Blend を使用して、WPF を調べてみてください。どこまで洗練されたものを目指しているのかはわかりませんが、単純なエディタなら扱えるはずです。これをチェックしてください MSDN 記事 詳細については。

調べてみるとよいかもしれません カイログラフィックスライブラリ. 。の 単核症 プロジェクトには C# のバインディングがあります。

カイロ はオプションです。現在、GDI+ と Cairo の両方を使用して地図ソフトウェアを書き直しています。タイル マップ ジェネレーターなどの機能を備えています。

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