public MainGame() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; graphics.PreferredBackBufferWidth = WindowWidth; graphics.PreferredBackBufferHeight = WindowHeight; camera = new BasicCamera { Position = new Vector3(0, 70, 100), Direction = new Vector3(0, -0.4472136f, -0.8944272f), Fov = MathHelper.PiOver4, AspectRatio = (float) WindowWidth / (float) WindowHeight, NearClipDistance = 1.0f, FarClipDistance = 1000.0f }; cameraFrustum = new BoundingFrustum(Matrix.Identity); corners = new Vector3[8]; // gridModel が半径約 183 であるため、 // これを含むように簡易シーン AABB を決定。 // なお、広大な世界を扱う場合には、表示カメラの視錐台に含まれるオブジェクト、 // および、それらに投影しうるオブジェクトを動的に選択および決定し、 // 適切な最小シーン領域を算出して利用する。 sceneBox = new BoundingBox(new Vector3(-200), new Vector3(200)); useCameraFrustumSceneBox = true; currentLightCameraType = LightCameraType.LiSPSM; basicLightCameraBuilder = new BasicLightCameraBuilder(); uniformLightCameraBuilder = new UniformLightCameraBuilder(); uniformLightCameraBuilder.LightFarClipDistance = lightFar; liSPSMLightCameraBuilder = new LiSPSMLightCameraBuilder(); liSPSMLightCameraBuilder.LightFarClipDistance = lightFar; splitCount = MaxSplitCount; pssm = new PSSM(); pssm.Fov = camera.Fov; pssm.AspectRatio = camera.AspectRatio; pssm.NearClipDistance = camera.NearClipDistance; pssm.FarClipDistance = camera.FarClipDistance; splitDistances = new float[MaxSplitCount + 1]; splitProjections = new Matrix[MaxSplitCount]; shadowMaps = new ShadowMap[MaxSplitCount]; lightViewProjections = new Matrix[MaxSplitCount]; shadowMapForm = ShadowMapForm.Basic; // 単位ベクトル。 lightDirection = new Vector3(0.3333333f, -0.6666667f, -0.6666667f); currentFrustum = new BoundingFrustum(Matrix.Identity); }