9

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

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

4

6 に答える 6

10

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

于 2008-09-12T02:59:41.463 に答える
4

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

私は実際にスタック オーバーフローに関する別の投稿を書き、他のより良いアプローチがあるかどうかを尋ねました。

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

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

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

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

于 2008-09-12T03:02:41.020 に答える
2
  • より高速な 3D グラフィックスのためのマネージ DirectX (Microsoft.DirectX 名前空間)。これは、DirectX API に対する堅実な .NET ラッパーであり、.NET オブジェクトの作成とマーシャリングのパフォーマンスが少し低下します。フル機能の最新の 3D エンジンを作成していない限り、問題なく動作します。

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

于 2008-09-12T04:33:40.083 に答える
1

Visual Studio や Expression Blend を使用して、WPF を調べることができます。どれほど洗練されたものを目指しているのかはわかりませんが、単純なエディターを処理できるはずです。詳細については、このMSDN の記事を参照してください。

于 2008-09-12T03:21:38.277 に答える
1

Cairo グラフィック ライブラリを調べることができます。Monoプロジェクトには、C# のバインディングがあります。

于 2008-11-13T13:09:07.000 に答える