public void ConstrainedAlignAxis(int nAxis, Vector3f vTo, Vector3f vAround) { Vector3f axis = GetAxis(nAxis); float fAngle = MathUtil.PlaneAngleSignedD(axis, vTo, vAround); var rot = Quaternionf.AxisAngleD(vAround, fAngle); Rotate(rot); }
public void Update() { Vector3f delta = (Vector3f)Input.mousePosition - last_mouse_pos; Transform x = mainCamera.transform; if (Input.mouseScrollDelta.y != 0) { if (mainCamera.orthographic) { mainCamera.orthographicSize = MathUtil.Clamp( mainCamera.orthographicSize - ScrollSpeed * Input.mouseScrollDelta.y, 1, 1000); } } else if (Input.GetMouseButton(1) || Input.GetMouseButton(2)) { mainCamera.transform.position += (-PanSpeed * delta.x * x.right) + (-PanSpeed * delta.y * x.up); } else if (Input.GetMouseButton(0)) { Quaternionf rotatelr = Quaternionf.AxisAngleD(x.up, -RotateSpeed * delta.x); Quaternionf rotateud = Quaternionf.AxisAngleD(x.right, RotateSpeed * delta.y); Quaternionf cur_rotation = TargetObject.transform.rotation; Quaternion new_rotation = rotatelr * rotateud * cur_rotation; TargetObject.transform.rotation = new_rotation; } last_mouse_pos = Input.mousePosition; }
public static Quaternionf FromToConstrained(Vector3f vFrom, Vector3f vTo, Vector3f vAround) { float fAngle = MathUtil.PlaneAngleSignedD(vFrom, vTo, vAround); return(Quaternionf.AxisAngleD(vAround, fAngle)); }