void UpdateEyeProjectionProperties()
{
if ((dirtyFlags & DirtyFlags.EyeProjectionProperties) != 0)
{
// eyeProjection に正しい射影行列が設定されている事を仮定。
if (eyeProjection.M44 == 1.0f)
{
// 正射影。
eyeProjectionType = ProjectionType.Orthographic;
MatrixHelper.ExtractOrthographic(
ref eyeProjection,
out eyeProjectionLeft,
out eyeProjectionRight,
out eyeProjectionBottom,
out eyeProjectionTop,
out eyeProjectionNear,
out eyeProjectionFar);
eyeProjectionFov = float.NaN;
eyeProjectionAspectRatio = float.NaN;
}
else
{
// 透視射影。
eyeProjectionType = ProjectionType.Perspective;
MatrixHelper.ExtractPerspective(
ref eyeProjection,
out eyeProjectionFov,
out eyeProjectionAspectRatio,
out eyeProjectionLeft,
out eyeProjectionRight,
out eyeProjectionBottom,
out eyeProjectionTop,
out eyeProjectionNear,
out eyeProjectionFar);
}
dirtyFlags &= ~DirtyFlags.EyeProjectionProperties;
}
}