void HandleInput(GameTime gameTime) { float time = (float) gameTime.ElapsedGameTime.TotalMilliseconds; lastKeyboardState = currentKeyboardState; lastGamePadState = currentGamePadState; currentKeyboardState = Keyboard.GetState(); currentGamePadState = GamePad.GetState(PlayerIndex.One); rotateDude += currentGamePadState.Triggers.Right * time * 0.2f; rotateDude -= currentGamePadState.Triggers.Left * time * 0.2f; if (currentKeyboardState.IsKeyDown(Keys.Q)) rotateDude -= time * 0.2f; if (currentKeyboardState.IsKeyDown(Keys.E)) rotateDude += time * 0.2f; if (currentKeyboardState.IsKeyUp(Keys.B) && lastKeyboardState.IsKeyDown(Keys.B) || currentGamePadState.IsButtonUp(Buttons.B) && lastGamePadState.IsButtonDown(Buttons.B)) { currentLightCameraType++; if (LightCameraType.Basic < currentLightCameraType) currentLightCameraType = LightCameraType.LiSPSM; } if (currentKeyboardState.IsKeyUp(Keys.Y) && lastKeyboardState.IsKeyDown(Keys.Y) || currentGamePadState.IsButtonUp(Buttons.Y) && lastGamePadState.IsButtonDown(Buttons.Y)) { useCameraFrustumSceneBox = !useCameraFrustumSceneBox; } if (currentKeyboardState.IsKeyUp(Keys.X) && lastKeyboardState.IsKeyDown(Keys.X) || currentGamePadState.IsButtonUp(Buttons.X) && lastGamePadState.IsButtonDown(Buttons.X)) { if (shadowMapEffectForm == ShadowMapEffectForm.Basic) { shadowMapEffectForm = ShadowMapEffectForm.Variance; } else { shadowMapEffectForm = ShadowMapEffectForm.Basic; } } if (currentKeyboardState.IsKeyUp(Keys.L) && lastKeyboardState.IsKeyDown(Keys.L) || currentGamePadState.IsButtonUp(Buttons.LeftShoulder) && lastGamePadState.IsButtonDown(Buttons.LeftShoulder)) { lispsmLightCamera.AdjustOptimalN = !lispsmLightCamera.AdjustOptimalN; } if (currentKeyboardState.IsKeyDown(Keys.Escape) || currentGamePadState.Buttons.Back == ButtonState.Pressed) { Exit(); } }
public MainGame() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; graphics.PreferredBackBufferWidth = windowWidth; graphics.PreferredBackBufferHeight = windowHeight; var aspectRatio = (float) windowWidth / (float) windowHeight; projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, aspectRatio, cameraNear, cameraFar); corners = new Vector3[8]; // gridModel が半径約 183 であるため、 // これを含むように簡易シーン AABB を決定。 // なお、広大な世界を扱う場合には、表示カメラの視錐台に含まれるオブジェクト、 // および、それらに投影しうるオブジェクトを動的に選択および決定し、 // 適切な最小シーン領域を算出して利用する。 sceneBox = new BoundingBox(new Vector3(-200), new Vector3(200)); useCameraFrustumSceneBox = true; // ライト カメラの初期化。 basicLightCamera = new BasicLightCamera(); basicLightCamera.LightDirection = lightDirection; focusedLightCamera = new FocusedLightCamera(); focusedLightCamera.EyeNearDistance = cameraNear; focusedLightCamera.EyeFarDistance = cameraFar; focusedLightCamera.LightDirection = lightDirection; focusedLightCamera.LightFarDistance = lightFar; lispsmLightCamera = new LiSPSMLightCamera(); lispsmLightCamera.EyeNearDistance = cameraNear; lispsmLightCamera.EyeFarDistance = cameraFar; lispsmLightCamera.LightDirection = lightDirection; lispsmLightCamera.LightFarDistance = lightFar; currentLightCameraType = LightCameraType.LiSPSM; shadowMapEffectForm = ShadowMapEffectForm.Variance; }