public override void Update(float dt) { base.Update(dt); SlimDX.Vector3 ForwardDir = LookAt - Position; SlimDX.Vector3 RightDir = SlimDX.Vector3.Cross(ForwardDir, Up) * -1.0f; BasePosition += ((ForwardDir * _forwardSpeed * FlyRate) + (RightDir * _rightSpeed * FlyRate)) * dt * ((_isShiftDown) ? 0.03f : 1.0f); // Get camera position from polar coords, plus camera origin var x = MathF.SinF(_phi) * MathF.CosF(_theta); var z = MathF.SinF(_phi) * MathF.SinF(_theta); var y = MathF.CosF(_phi); Position = BasePosition; LookAt = Position + new SlimDX.Vector3(x, y, z); }