私は AGAL の頂点シェーダーとフラグメント シェーダーを頻繁に使用してきました。個々のオブジェクトは正しく照らされていますが (スペキュラー シェーディングを含む)、オブジェクトが他のオブジェクトに影を落とすようにしたいと考えています。私はオンラインで調べましたが、AGAL で直接作業しているほとんどの人はカスタム Stage3D ライブラリを構築しており、シャドウ キャスティング ソリューションはパブリック ドメインにないようです。それを変えようとする人はいますか?
オブジェクトに別のオブジェクトに影を落とす方法を知りたいです。この問題をどこから始めればよいのか頭がつかめないので、私が試したことを投稿することはできません。別のオブジェクトのシェーダーに情報 (他のオブジェクトが光をブロックしているかどうか) をどのように渡しますか?
ありがとう。
1 に答える
0
これはディファード シェーディングと呼ばれ、頂点シェーダーとフラグメント シェーダーの 2 つのパスを実行する必要があります。最初のパスでは、距離、法線、オクルージョンに関する情報を蓄積します。2 番目のパスでは、最初のパスの情報をレンダリングして適用し、影を作成します。
別のオプションは ShadowMapping です。
基本的なシャドウマップ
基本的なシャドウマップ アルゴリズムは、2 つのパスで構成されます。まず、ライトの視点からシーンをレンダリングします。各フラグメントの深度のみが計算されます。次に、シーンが通常どおりレンダリングされますが、現在のフラグメントが影の中にあることを確認するための追加のテストが行われます。
「影の中にいる」テストは、実際には非常に簡単です。現在のサンプルが同じポイントのシャドウマップよりもライトから離れている場合、これはシーンにライトに近いオブジェクトが含まれていることを意味します。つまり、現在のフラグメントは影にあります。
于 2014-08-10T13:46:40.577 に答える