protected override void BuildCore(out Matrix lightView, out Matrix lightProjection)
{
// 標準的なライト空間行列の算出。
CalculateStandardLightSpaceMatrices(out lightView, out lightProjection);
// 凸体 B の算出。
CalculateBodyB();
// 凸体 B が空の場合は生成する影が無いため、
// 先に算出した行列をそのまま利用。
if (bodyBPoints.Count == 0)
{
return;
}
// 凸体 LVS の算出。
CalculateBodyLVS();
Matrix lightSpace;
Matrix transform;
// 軸の変換。
transform = NormalToLightSpace;
TransformLightProjection(ref lightProjection, ref transform);
// ライト空間におけるカメラ方向へ変換。
Matrix.Multiply(ref lightView, ref lightProjection, out lightSpace);
CreateLightLook(ref lightSpace, out transform);
TransformLightProjection(ref lightProjection, ref transform);
// 単位立方体へ射影。
Matrix.Multiply(ref lightView, ref lightProjection, out lightSpace);
CreateTransformToUnitCube(ref lightSpace, out transform);
TransformLightProjection(ref lightProjection, ref transform);
// 軸の変換 (元へ戻す)。
transform = LightSpaceToNormal;
TransformLightProjection(ref lightProjection, ref transform);
// DirectX クリッピング空間へ変換。
Matrix.CreateOrthographicOffCenter(-1, 1, -1, 1, -1, 1, out transform);
TransformLightProjection(ref lightProjection, ref transform);
}