之前寫的人物模型接收陰影突然出了問題,完全接收不到陰影,后來發現是自己寫的一個矩陣引起陰影上的LightWorldViewProjmatrix出了問題。
計算陰影,必須有一個矩陣叫LightWorldViewProjMatrix,該矩陣的意思是在以燈光為視點的投影矩陣。
在接收陰影的物體的VS中,必須要知道當前頂點是在shadowmap的哪個位置,
即要把該頂點轉換成燈光為視點的投影空間中。
發現了shader中的一段代碼錯誤,我是把骨骼動畫的原始頂點作為變換后的頂點再X矩陣,這樣肯定是有問題,后來改成這樣:
output.posInLight = mul(float4(output.posWorld, 1), LightSpaceProjMatrix);
關鍵是這個LightSpaceProjMatrix,其實這個矩陣隨便你如何去定義的。我這邊是LightView * LightProj得出來,因為output.posWorld是世界空間的坐標。
現在效果出來了,如圖: