Sample10の解説

 

 

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の完成です

コメント

タイトルとURLをコピーしました