Sample 10はLiSPSMによる影表現です
ただ単に普通のシャドウマップだと解像度が足りなくなるところを
視点で歪める事によって、カメラに近い部分は大きく、遠い部分は小さく描きます
調整がチョイ難しいので
PSSMをライブラリに組み込む予定です
まず、変数フィールド内でLiSPSMクラスを作成し、初期化します
次に更新処理の中で各種パラメーターをLiSPSMクラスに送ります
- LiSPSM.SetLiSPSMParam(Vector3 vEyePos,Vector3 vViewDir,Vector3 vLightDir);
- vEyePosにはカメラの位置、vViewDirにはカメラの向き
- vLightDirにはライトの向きを設定してください
次に、視錘台の8点を求めます
- LiSPSM.CalcPointsOfViewBolume(Vector3 vEyePos,Vector3 vTarPos,Vector3 upVector,float fov,float aspect,float fNear,float fFar);
- vEyePosにはカメラ位置、vTarPosには始点位置
- upVectorにはアップベクトル、fovには視野角
- aspectにはアスペクト比、fNearにはニアクリップ
- fFarにはファークリップの値を入力してください
- 簡単に言えば、View行列とProjection行列で使ったパラメーターを送ってください
また、視錘台の8点を求めればいいので
BoundingFrustumクラスを使った方法で視錘台を作って
GetCorners()で8点を求めて
LiSPSM.vecListに送ってやってもOKです
視錘台の8点が求められたら
- LiSPSM.CalcLispMatrix();
でLiSPSM用の行列を習得します
習得した行列をライトのプロジェクション行列とすれば
LiSPSMの完成です
コメント