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