Zバッファの効率的な実装
質問
現在、Zバッファーアルゴリズムを使用して独自のレンダラーを実装しています。必要な計算を行ったら(読む:Zバッファーは正しい値で満たされています)、SDLを使用して必要なピクセルで色を付けます。これにはhwsurfaceを使用しています。
私の質問は、どうすればこれをできるだけ速くレンダリングできることです。これにより、図面自体を意味します。自分の構造、アルゴリズムで最適化を行うことができます。後でそれを行いますが、図面自体ができるだけ速いことを確認したいと思います。
Zbufferの実装があるので(そして後で他のアルゴリズムがあります)、OpenGLを使用できないので、代替手段はありますか?
今、私はZバッファーのすべてのポイントを調べて、1つずつ描画する必要があるすべてのピクセルを描画します(そして、それはzバッファリングなので、私はこれをしなければなりませんよね?) DrawPixelメソッド。 SDLに関しては、Zバッファーを越えて表面をロックし、すべてのピクセルを描き、その後ロックを解除します。
助言がありますか?
解決
ソフトウェアの実装は非常に遅いです。つまり、ワープは、8800GTが行うFPSの10分の1でi7ヘキサコアの裂傷をレンダリングします。ソフトウェアが実装されたZバッファーで競争力のあるパフォーマンスは見つかりません。
Zバッファーは特に複雑なアルゴリズムではなく、別のアルゴリズムよりも効率的な実装が見つかる可能性は非常に低いです。 Zバファーリングは、ラスター化中に行うことではありません。ピクセルレンダリング中に行うことです。新しいピクセルの深さが現在書かれた値よりも遠く離れている場合は、ピクセルをそれ以上レンダリングしないでください。たとえば、その色などを計算しないでください。アルゴリズムに最も効率的な種類を選択できるようなものではありません。マトリックスの乗算のようなもので、ほぼ同じです。