2011-01-22 14 views
2

現在、Zバッファアルゴリズムを使用して自分のレンダラを実装しています。必要な計算が完了したら(私のZバッファには正しい値が書き込まれています)、SDLを使用して必要なピクセルで色付けします。私はこのためにHWSurfaceを使用しています。Zバッファの効率的な実装

私の質問は、どうすればできるだけ速くレンダリングできますか?これは図面そのものを意味し、構造やアルゴリズムに最適化を行うことができますが、後でそれを行いますが、描画自体ができるだけ速くなるようにしたいと考えています。

私は自分自身でZBufferを実装しているので(後で他のアルゴリズムもあります)、私はOpenGLを使うことができません。

私はちょうどzバッファのすべてのポイントを調べています。描画する必要があるすべてのピクセルを1つずつ描画します(zバッファリングのため、これを行う必要があります)。私はDrawPixelメソッドを呼び出します。 SDLについては、私の表面をロックしてからZバッファを使い、すべてのピクセルを描画してからロックを解除してください。これは私が知る限り速く進むことはできません。

提案がありますか?

+0

テクスチャを更新することでこれを描画することができますか?次に、OpenGLを使用してテクスチャで1つのクワッドを描画しますか? – vmpstr

+0

私はこれをチェックするつもりですが、まだ確かではありません。 – KWyckmans

答えて

1

ソフトウェアの実装は非常に遅いです。つまり、WARPは、i7のヘキサコア上で8800GTの1/10のFPSでレンダリングします。ソフトウェアで実装されたZバッファで競合するパフォーマンスを見つけることはできません。

Zバッファは特に複雑なアルゴリズムではなく、他の実装よりも効率的な実装を見つけることはほとんどありません。 Zバッファリングは、ラスタライズ時に行うものではありません。ピクセルレンダリング中に行うことです。新しいピクセルの深さが現在書き込まれている値よりも遠い場合は、ピクセルをそれ以上にレンダリングしないでください。たとえば、色などを計算しないでください。zバッファなどの描画はしません。アルゴリズムにとって最も効率的なソートを選択するような並べ替えのようなものではありません。行列乗算のようなものですが、ほぼ同じです。

+0

ラスタライゼーション*は「ピクセルレンダリング」であり、通常はデプステストを行います。 –

+0

ええ、あなたは完全に正しいです、私はそれが速く行くつもりはないと受け入れる必要があります。 – KWyckmans

関連する問題