public virtual void Rotate(GamePlay.Camera.eCameraAxis axis, float angle, bool rotLookAt = false) { if (Camera == null) { return; } var pos = Camera.CameraData.Position; var lookAt = Camera.CameraData.LookAt; switch (axis) { case EngineNS.GamePlay.Camera.eCameraAxis.Forward: { var forward = Camera.CameraData.Direction; var up = Camera.CameraData.Up; var mat = EngineNS.Matrix.RotationAxis(forward, angle); up = EngineNS.Vector3.TransformCoordinate(up, mat); Camera.LookAtLH(pos, lookAt, up); } break; case EngineNS.GamePlay.Camera.eCameraAxis.Up: { var up = EngineNS.Vector3.UnitY; var mat = EngineNS.Matrix.RotationAxis(up, angle); var dir = EngineNS.Vector3.TransformCoordinate((pos - lookAt), mat); var newPos = lookAt + dir; Camera.LookAtLH(newPos, lookAt, up); } break; case EngineNS.GamePlay.Camera.eCameraAxis.Right: { var right = Camera.CameraData.Right; var mat = EngineNS.Matrix.RotationAxis(right, angle); var dir = EngineNS.Vector3.TransformCoordinate((pos - lookAt), mat); var newPos = lookAt + dir; Camera.LookAtLH(newPos, lookAt, Camera.CameraData.Up); } break; } KeepDirection = Camera.CameraData.Direction; }
public virtual void Move(GamePlay.Camera.eCameraAxis axis, float step, bool moveWithLookAt = false) { //if (Camera == null) // return; //var pos = Camera.Position; //var lookAt = Camera.LookAt; //switch(axis) //{ // case EngineNS.GamePlay.Camera.eCameraAxis.Forward: // { // var dir = pos - lookAt; // var len = dir.Length(); // if(step < len) // { // dir.Normalize(); // var newPos = pos - dir * step; // Camera.LookAtLH(newPos, lookAt, EngineNS.Vector3.UnitY); // } // } // break; // case EngineNS.GamePlay.Camera.eCameraAxis.Up: // { // var up = Camera.Up; // up.Normalize(); // var delta = up * step; // var newPos = pos + delta; // var newLookAt = lookAt + delta; // Camera.LookAtLH(newPos, newLookAt, up); // } // break; // case EngineNS.GamePlay.Camera.eCameraAxis.Right: // { // var right = Camera.Right; // right.Normalize(); // var delta = right * step; // var newPos = pos - delta; // var newLookAt = lookAt - delta; // Camera.LookAtLH(newPos, newLookAt, Camera.Up); // } // break; //} }