2

iPhone でシャドウ ボリュームをいじっていますが、シャドウ ボリューム キャップがファー プレーンでクリップされている場合を除き、すべてが機能します。

gl_ClipVertexは GLSL ES では使用できないため、遠方平面にあるようにクリップするにはどうすればよいgl_Position.zですか? すでに を使用しようとしていますgl_Position.z = gl_Position.wが、結果が正しくなく、シャドウ ボリュームがカメラの方向に従っているようです。それを行う他の方法はありますか?

4

1 に答える 1

1

シャドウボリュームが機能するためには、おそらく、キャップが遠方の平面によってクリップされないようにする必要があります。これを行うには、深度範囲を増やす(遠い平面を遠ざける)か、押し出しの量を減らします。

多くのシャドウボリュームテクニックがあり、それらのいくつかは、深度キャッピングを念頭に置いて特別に設計されています。私のお気に入りはカーマックの逆です。これは、ジオメトリのバウンディングボックスを知っている限りうまく機能します(カーマックはBSPツリーを使用するため、彼にとっては簡単です)。これは、シャドウボリュームを押し出す必要がある距離を正確に知っているためです。また、ライトがシャドウキャスティングオブジェクトに非常に近い場合は、クリッピングを実行する必要がある場合があります(そうでない場合、ファーキャップではありませんが、ボリュームのコーナーがクリッピングされます)。これは説明するのは簡単ですが、実装するのはかなり難しいです。GPUでの単純な実装により適した他のアルゴリズムもいくつかあります(http://www.nvidia.com.br/object/robust_shadow_volumes.htmlを参照)。

これがお役に立てば幸いです。さらにサポートが必要な場合は、お気軽にコメントしてください。

于 2012-01-20T12:16:48.230 に答える