/** * Normalize a Vector4 in-buffer. * * @param buf * the buffer to find the Vector4 within * @param index * the position (in terms of vectors, not floats) of the vector to normalize */ public static void normalizeVector4(final FloatBuffer buf, final int index) { final Vector4 temp = Vector4.fetchTempInstance(); populateFromBuffer(temp, buf, index); temp.normalizeLocal(); setInBuffer(temp, buf, index); Vector4.releaseTempInstance(temp); }
/** * Normalize a Vector4 in-buffer. * * @param buf * the buffer to find the Vector4 within * @param index * the position (in terms of vectors, not floats) of the vector to normalize */ public static void normalizeVector4(final FloatBuffer buf, final int index) { final Vector4 temp = Vector4.fetchTempInstance(); populateFromBuffer(temp, buf, index); temp.normalizeLocal(); setInBuffer(temp, buf, index); Vector4.releaseTempInstance(temp); }
private void calculateIntersection(final double planeHeight, final ReadOnlyVector2 screenPosition, final ReadOnlyMatrix4 modelViewProjectionInverseMatrix) { origin.set(screenPosition.getX() * 2 - 1, screenPosition.getY() * 2 - 1, -1, 1); direction.set(screenPosition.getX() * 2 - 1, screenPosition.getY() * 2 - 1, 1, 1); modelViewProjectionInverseMatrix.applyPre(origin, origin); modelViewProjectionInverseMatrix.applyPre(direction, direction); direction.subtractLocal(origin); // final double t = (planeHeight * origin.getW() - origin.getY()) // / (direction.getY() - planeHeight * direction.getW()); if (Math.abs(direction.getY()) > MathUtils.EPSILON) { final double t = (planeHeight - origin.getY()) / direction.getY(); direction.multiplyLocal(t); } else { direction.normalizeLocal(); direction.multiplyLocal(mainCamera.getFrustumFar()); } origin.addLocal(direction); }
private void calculateIntersection(final double planeHeight, final ReadOnlyVector2 screenPosition, final ReadOnlyMatrix4 modelViewProjectionInverseMatrix) { origin.set(screenPosition.getX() * 2 - 1, screenPosition.getY() * 2 - 1, -1, 1); direction.set(screenPosition.getX() * 2 - 1, screenPosition.getY() * 2 - 1, 1, 1); modelViewProjectionInverseMatrix.applyPre(origin, origin); modelViewProjectionInverseMatrix.applyPre(direction, direction); direction.subtractLocal(origin); // final double t = (planeHeight * origin.getW() - origin.getY()) // / (direction.getY() - planeHeight * direction.getW()); if (Math.abs(direction.getY()) > MathUtils.EPSILON) { final double t = (planeHeight - origin.getY()) / direction.getY(); direction.multiplyLocal(t); } else { direction.normalizeLocal(); direction.multiplyLocal(mainCamera.getFrustumFar()); } origin.addLocal(direction); }
@Test public void testNormalize() { final Vector4 vec1 = new Vector4(2, 1, 3, -1); assertTrue(vec1.length() == Math.sqrt(15)); final Vector4 vec2 = vec1.normalize(null); final double invLength = MathUtils.inverseSqrt(2 * 2 + 1 * 1 + 3 * 3 + -1 * -1); assertEquals(new Vector4(2 * invLength, 1 * invLength, 3 * invLength, -1 * invLength), vec2); vec1.normalizeLocal(); assertEquals(new Vector4(2 * invLength, 1 * invLength, 3 * invLength, -1 * invLength), vec1); vec1.zero(); vec1.normalize(vec2); assertEquals(vec1, vec2); // ensure no exception thrown vec1.normalizeLocal(); vec1.normalize(null); }