之前写的人物模型接收阴影突然出了问题,完全接收不到阴影,后来发现是自己写的一个矩阵引起阴影上的LightWorldViewProjmatrix出了问题。
计算阴影,必须有一个矩阵叫LightWorldViewProjMatrix,该矩阵的意思是在以灯光为视点的投影矩阵。
在接收阴影的物体的VS中,必须要知道当前顶点是在shadowmap的哪个位置,
即要把该顶点转换成灯光为视点的投影空间中。
发现了shader中的一段代码错误,我是把骨骼动画的原始顶点作为变换后的顶点再X矩阵,这样肯定是有问题,后来改成这样:
output.posInLight = mul(float4(output.posWorld, 1), LightSpaceProjMatrix);
关键是这个LightSpaceProjMatrix,其实这个矩阵随便你如何去定义的。我这边是LightView * LightProj得出来,因为output.posWorld是世界空间的坐标。
现在效果出来了,如图: