2011-10-29 13 views
2

私のiPhoneのシャドウボリュームを使って夢中になり、シャドウボリュームのキャップが遠い平面でクリップされている場合は、すべて例外があります。遠隔地へのGLSL ESクリップの頂点

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

答えて

1

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

シャドウボリュームテクニックは数多くあり、その中には奥行き補正を念頭において避けて設計されたものがあります。私の好きなものはCarmackの逆です。これは、シャドウボリュームをどれだけ押し出す必要があるかを正確に知っているため、ジオメトリの境界ボックスを知っている限り(CarmackはBSPツリーを使用するので簡単です)また、ライトがシャドーキャスティングオブジェクトに非常に接近している場合は、クリッピングを行う必要があります(そうでなければ、遠方キャップではありませんが、ボリュームの角がクリップされてしまいます)。説明は簡単ですが、実装するのは難しいです。他のアルゴリズムもいくつかあり、GPUで簡単に実装するのに適しています(http://www.nvidia.com.br/object/robust_shadow_volumes.html参照)。

私はこれがあなたを助けてくれることを願っております。さらなる支援が必要な場合は、お気軽にコメントしてください。

関連する問題