2008-09-12 5 views
7

C#でグラフィックスをレンダリングする別の方法はGDI+XNAを超えていますか? (タイルマップエディタの開発のために。)C#でグラフィックスをレンダリングする

+0

David、あなたの質問に "ポインタを理解する"と気づいただけです。素晴らしい質問、素晴らしい答え!その投稿に記載されているすべてのポイントは、私の「安全でない」回答にも適用されます。 – Ash

答えて

8

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

+0

恐ろしい!私は実際にSDLに精通しています。私はこれを調べるつもりです。 –

+0

彼らはウィキを動かしてリンクが機能しなくなりました。ちょうどhttp://cs-sdl.sourceforge.net/に行き、そこからナビゲートしてください –

3

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

私は実際に他のより良いアプローチがあるかどうかを尋ねるスタックオーバーフロー上の他の記事を書いた:それは、比較的高性能ですが、それは効率的にメモリにアクセスするためのポインタを使用してUnsafe C# and pointers for 2D rendering, good or bad?

、それは危険なコンパイラオプションが必要です。したがって、この以前の投稿の理由。

これは、必要な手順のハイレベルです:

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

この方法では、ターゲットサーフェスの現在の表示モード(ピッチとビット/ビット)を確認する必要があります。また、プログラムの実行中にウィンドウのサイズ変更や画面フォーマットの変更に対処するための戦略が必要です。

1

Visual Studioおよび/またはExpression Blendを使用して、WPFを調べることができます。どの程度洗練されているのかよく分かりませんが、単純なエディタを扱えるはずです。詳細はMSDN Articleをご覧ください。

2
  • 高速3Dグラフィックスのための管理DirectX(Microsoft.DirectX名前空間)。これは、DirectX API上の固い.NETラッパーです。これには、作成のために少しのパフォーマンスヒットがあります。NETオブジェクトとマーシャリング。完全な機能を備えた最新の3Dエンジンを作成していない限り、正常に動作します。

  • Window Presentation Foundation(WPF)(Windows.Media名前空間) - 2Dグラフィックスに最適です。 3D能力も限られています。 Windows Formsをベクトル、ハードウェアアクセラレータによる解像度独立フレームワークで置き換えることを目指しています。非常に便利で、カスタムコントロール、リソース、データバインディング、イベント、コマンドのいくつかのフレーバーをサポートしています...また、いくつかのWTFがあります。スピードは通常GDIよりも速く、DirectXよりも遅く、あなたのやり方に大きく依存します(賢明な方法で書き直してから60倍も速く動作することがわかります)。我々は、リアルタイムのインジケータ、グラフ、およびプロットが3つの1280x1024のスクリーンを1つの(そして最高のものではない)PCに実装することに成功しました。

0

Cairoはオプションです。私は現在、GDI +とCairoの両方を使ってマッピングソフトウェアを書き直しています。それは他の特徴の中でもタイルマップジェネレータを持っています。

関連する問題