@Test public void testAxes() { final Matrix3 rot = new Matrix3().applyRotationX(MathUtils.QUARTER_PI).applyRotationY(MathUtils.HALF_PI); final Quaternion quat1 = new Quaternion().fromAxes(rot.getColumn(0, null), rot.getColumn(1, null), rot.getColumn(2, null)); final Quaternion quat2 = new Quaternion().fromRotationMatrix(rot); assertEquals(quat2, quat1); final Vector3[] axes = quat1.toAxes(new Vector3[3]); quat1.fromAxes(axes[0], axes[1], axes[2]); assertEquals(quat2, quat1); }
/** * Modifies this quaternion to equal the rotation required to point the z-axis at 'direction' and the y-axis to * 'up'. * * @param direction * where to 'look' at * @param up * a vector indicating the local up direction. * @return this quaternion for chaining. */ public Quaternion lookAt(final ReadOnlyVector3 direction, final ReadOnlyVector3 up) { final Vector3 xAxis = Vector3.fetchTempInstance(); final Vector3 yAxis = Vector3.fetchTempInstance(); final Vector3 zAxis = Vector3.fetchTempInstance(); direction.normalize(zAxis); up.normalize(xAxis).crossLocal(zAxis); zAxis.cross(xAxis, yAxis); fromAxes(xAxis, yAxis, zAxis); normalizeLocal(); Vector3.releaseTempInstance(xAxis); Vector3.releaseTempInstance(yAxis); Vector3.releaseTempInstance(zAxis); return this; }
/** * Modifies this quaternion to equal the rotation required to point the z-axis at 'direction' and the y-axis to * 'up'. * * @param direction * where to 'look' at * @param up * a vector indicating the local up direction. * @return this quaternion for chaining. */ public Quaternion lookAt(final ReadOnlyVector3 direction, final ReadOnlyVector3 up) { final Vector3 xAxis = Vector3.fetchTempInstance(); final Vector3 yAxis = Vector3.fetchTempInstance(); final Vector3 zAxis = Vector3.fetchTempInstance(); direction.normalize(zAxis); up.normalize(xAxis).crossLocal(zAxis); zAxis.cross(xAxis, yAxis); fromAxes(xAxis, yAxis, zAxis); normalizeLocal(); Vector3.releaseTempInstance(xAxis); Vector3.releaseTempInstance(yAxis); Vector3.releaseTempInstance(zAxis); return this; }
q.fromAxes(shadowCam.getLeft(), shadowCam.getUp(), shadowCam.getDirection());
q.fromAxes(shadowCam.getLeft(), shadowCam.getUp(), shadowCam.getDirection());