2012-04-24 11 views
0

私は単純な3Dレンダリングエンジンを作成しています。
私の3D処理の最終結果はピクセルデータです。次に、GDI +で画面に表示する必要があります。
私はWinFormsとVisual Basicを使用しています。私はフォームのClientRectangleに直接描画しています。GDI +でピクセルデータを表示

私はいくつかの質問があります。
ピクセルを処理した後は、各ピクセルをGDI +に個別に送信するのではなく、最初にピクセルデータをバッファに書き込む必要がありますか?
- そうなら、一度にどれだけの画面をバッファする必要がありますか?全画面、半分、四半期、8分?私はそこにRAMの使用/パフォーマンスのトレードオフがあるかもしれないと思う。
- ピクセルバッファの最適なデータ構造は何ですか?
- ピクセルバッファ(または個々のピクセル)をレンダリングするのにどのGDI +コマンドを使用しますか?中間ステップとしてビットマップを作成し、ピクセルデータを直接スクリーンに送ることは避けられますか?

最大画面サイズ1600x1200が予想されます。 RAMは1GBの低さになる可能性があります。

ありがとうございました。

+0

最初にメモリバッファに書き込む必要があります。個々のピクセルを描画するのは、バッファを描画する場合に比べて非常に効率が悪いです。あなたには十分な余裕があるはずです。画像全体をバッファリングしない理由はありません。 – comingstorm

+0

OK、私は、バイトの配列または32ビット整数の配列、またはピクセルデータを表す構造体の配列、ピクセルあたり4バイトを持っています。このデータを画面に送る効率的な方法は何でしょうか? – mcu

+1

@ananthonlineによると、32ビット/ピクセルのRGBAバッファで始めてください。 'Bitmap'クラスは、さまざまなデータバッファ[formats](http://msdn.microsoft.com/en-us/library/ms534412(v = vs.85).aspx)に基づいてビットマップを作成することを可能にします。おそらく 'PixelFormat32bppARGB'か' PixelFormat32bppPARGB'を試してみるべきです。 – comingstorm

答えて

2

は、ここでそれらの答えの一部

  1. を見つけることを願って最初のRGBAの構造体のバッファにデータを書き込みます。たとえば、複数の「レイヤー」をレンダリングし、それらを合成する場合は、これが簡単になります。また、ある時点で遅延処理を実行したい場合にも、これは簡単になります。フル(タイル?)レンダリングが完了したら、それを出力ビットマップ/ファイルにフラッシュすることができます。
  2. これは、ユーザーがレンダリングできる解像度によって異なります。ギガピクセル画像をレンダリングしたい場合は、ある程度合理的な大きさでタイルする必要があります。タイルサイズは設定可能であることをお勧めします。そして、テスト後に合理的なデフォルト値に設定することができます。
  3. 遅延シェーディングを実行する予定がない場合は、単純なRGBAバッファで開始することをお勧めします。
  4. メモリに収まるようにタイル表示/レンダリングイメージを実行しない場合は、単にBitmap.LockBitsを使用し、そのようにデータを書き込むことができます。タイルレンダリングを使用している場合は、一度にスキャンラインをレンダリングして(それを「タイル」にする)ライブラリを探したり、TGA、PNG、シーク/ライトを作成するファイルフォーマットを修正する必要がありますファイルに直接アクセスします。イメージをRAWファイルとしてダンプし、コマンドラインツールを使用してイメージを変換することも、別のオプションになります。

希望します。