private void ProjectionChanged(Camera camera, Matrix matProj) { if (camera != ActiveCamera) return; mGlobalBufferStore.matProj = matProj; mGlobalChanged = true; var perspectiveCamera = camera as PerspectiveCamera; if (perspectiveCamera == null) return; mGlobalParamsBufferStore.fogParams.Z = perspectiveCamera.FarClip; mGlobalParamsChanged = true; M2Manager.ViewChanged(); }
private void ViewChanged(Camera camera, Matrix matView) { if (camera != ActiveCamera) return; mGlobalBufferStore.matView = matView; mGlobalChanged = true; M2Manager.ViewChanged(); UpdateCursorPosition(true); }
void ProjChanged(Camera cam, Matrix matProj) { mMatrixBuffer.UpdateData(new[] {cam.View, cam.Projection}); }
private void SetActiveCamera(Camera camera) { ActiveCamera = camera; }
public void Update(Camera cam, bool stateOnly) { if (mWindow.Focused == false || stateOnly) { mLastCursorPos = Cursor.Position; mLastUpdate = DateTime.Now; return; } var keyState = new byte[256]; UnsafeNativeMethods.GetKeyboardState(keyState); var positionChanged = false; var updateTerrain = false; var diff = (float)(DateTime.Now - mLastUpdate).TotalSeconds; var camBind = KeyBindings.Instance.Camera; if (KeyHelper.AreKeysDown(keyState, camBind.Forward)) { positionChanged = true; updateTerrain = true; cam.MoveForward(diff * SpeedFactor); } if (KeyHelper.AreKeysDown(keyState, camBind.Backward)) { positionChanged = true; updateTerrain = true; cam.MoveForward(-diff * SpeedFactor); } if (KeyHelper.AreKeysDown(keyState, camBind.Right)) { positionChanged = true; updateTerrain = true; cam.MoveRight(diff * SpeedFactor); } if (KeyHelper.AreKeysDown(keyState, camBind.Left)) { positionChanged = true; updateTerrain = true; cam.MoveRight(-diff * SpeedFactor); } if (KeyHelper.AreKeysDown(keyState, camBind.Up)) { positionChanged = true; cam.MoveUp(diff * SpeedFactor); } if (KeyHelper.AreKeysDown(keyState, camBind.Down)) { positionChanged = true; cam.MoveUp(-diff * SpeedFactor); } if (KeyHelper.IsKeyDown(keyState, Keys.RButton)) { var curPos = Cursor.Position; var dx = curPos.X - mLastCursorPos.X; var dy = curPos.Y - mLastCursorPos.Y; if (dx != 0) { cam.Yaw(dx * TurnFactor * (InvertX ? 1 : -1)); } if (dy != 0) { cam.Pitch(dy * TurnFactor * (InvertY ? 1 : -1)); } } if (positionChanged && PositionChanged != null) { PositionChanged(cam.Position, updateTerrain); } mLastUpdate = DateTime.Now; mLastCursorPos = Cursor.Position; }