0

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

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

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

ありがとう。

4

1 に答える 1

2

ここでそれらの答えのいくつかを見つけることができれば幸いです

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

お役に立てれば!

于 2012-04-24T18:32:58.740 に答える