public void Split(float[] distances, Matrix[] projections)
{
if (distances == null) throw new ArgumentNullException("distances");
if (projections == null) throw new ArgumentNullException("projections");
if (distances.Length < count + 1) throw new ArgumentException("Insufficient size.", "distances");
if (projections.Length < count) throw new ArgumentException("Insufficient size.", "projections");
// シーン領域を含みうる最小限の遠クリップ面を算出。
float adjustedFar = CalculateFarClipDistance(ref view, ref sceneBox, nearClipDistance);
adjustedFar = Math.Min(farClipDistance, adjustedFar);
// 近クリップ面から遠クリップ面の範囲を分割。
SplitDistance(nearClipDistance, adjustedFar, distances);
// 分割毎に射影行列を構築。
for (int i = 0; i < count; i++)
{
Matrix.CreatePerspectiveFieldOfView(fov, aspectRatio, distances[i], distances[i + 1], out projections[i]);
}
}