/** * @return same as multiplyLocal(-1) */ public Vector4 negateLocal() { return multiplyLocal(-1); }
/** * @return same as multiplyLocal(-1) */ public Vector4 negateLocal() { return multiplyLocal(-1); }
/** * Converts this vector into a unit vector by dividing it internally by its length. If the length is 0, (ie, if the * vector is 0, 0, 0, 0) then no action is taken. * * @return this vector for chaining */ public Vector4 normalizeLocal() { final double lengthSq = lengthSquared(); if (Math.abs(lengthSq) > MathUtils.EPSILON) { return multiplyLocal(MathUtils.inverseSqrt(lengthSq)); } return this; }
/** * Converts this vector into a unit vector by dividing it internally by its length. If the length is 0, (ie, if the * vector is 0, 0, 0, 0) then no action is taken. * * @return this vector for chaining */ public Vector4 normalizeLocal() { final double lengthSq = lengthSquared(); if (Math.abs(lengthSq) > MathUtils.EPSILON) { return multiplyLocal(MathUtils.inverseSqrt(lengthSq)); } return this; }
/** * Multiply and store a Vector3 in-buffer. * * @param toMult * the vector to multiply against * @param buf * the buffer to find the Vector3 within * @param index * the position (in terms of vectors, not floats) of the vector to multiply */ public static void multInBuffer(final ReadOnlyVector4 toMult, final FloatBuffer buf, final int index) { final Vector4 temp = Vector4.fetchTempInstance(); populateFromBuffer(temp, buf, index); temp.multiplyLocal(toMult); setInBuffer(temp, buf, index); Vector4.releaseTempInstance(temp); }
/** * Multiply and store a Vector3 in-buffer. * * @param toMult * the vector to multiply against * @param buf * the buffer to find the Vector3 within * @param index * the position (in terms of vectors, not floats) of the vector to multiply */ public static void multInBuffer(final ReadOnlyVector4 toMult, final FloatBuffer buf, final int index) { final Vector4 temp = Vector4.fetchTempInstance(); populateFromBuffer(temp, buf, index); temp.multiplyLocal(toMult); 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); }
public Vector3 getNormalizedDeviceCoordinates(final ReadOnlyVector3 worldPosition, Vector3 store) { if (store == null) { store = new Vector3(); } checkModelViewProjection(); final Vector4 position = Vector4.fetchTempInstance(); position.set(worldPosition.getX(), worldPosition.getY(), worldPosition.getZ(), 1); _modelViewProjection.applyPre(position, position); position.multiplyLocal(1.0 / position.getW()); store.setX(position.getX()); store.setY(position.getY()); store.setZ(position.getZ()); Vector4.releaseTempInstance(position); return store; }
public Vector3 getNormalizedDeviceCoordinates(final ReadOnlyVector3 worldPosition, Vector3 store) { if (store == null) { store = new Vector3(); } checkModelViewProjection(); final Vector4 position = Vector4.fetchTempInstance(); position.set(worldPosition.getX(), worldPosition.getY(), worldPosition.getZ(), 1); _modelViewProjection.applyPre(position, position); position.multiplyLocal(1.0 / position.getW()); store.setX(position.getX()); store.setY(position.getY()); store.setZ(position.getZ()); Vector4.releaseTempInstance(position); return store; }
zDepth * 2 - 1, 1); _modelViewProjectionInverse.applyPre(position, position); position.multiplyLocal(1.0 / position.getW()); store.setX(position.getX()); store.setY(position.getY());
zDepth * 2 - 1, 1); _modelViewProjectionInverse.applyPre(position, position); position.multiplyLocal(1.0 / position.getW()); store.setX(position.getX()); store.setY(position.getY());
@Test public void testMultiply() { final Vector4 vec1 = new Vector4(1, -1, 2, -2); final Vector4 vec2 = vec1.multiply(2.0, null); final Vector4 vec2B = vec1.multiply(2.0, new Vector4()); assertEquals(new Vector4(2.0, -2.0, 4.0, -4.0), vec2); assertEquals(new Vector4(2.0, -2.0, 4.0, -4.0), vec2B); vec2.multiplyLocal(0.5); assertEquals(new Vector4(1.0, -1.0, 2.0, -2.0), vec2); final Vector4 vec3 = vec1.multiply(vec2, null); final Vector4 vec3B = vec1.multiply(vec2, new Vector4()); assertEquals(new Vector4(1, 1, 4, 4), vec3); assertEquals(new Vector4(1, 1, 4, 4), vec3B); final Vector4 vec4 = vec1.multiply(2, 3, 2, 3, null); final Vector4 vec4B = vec1.multiply(2, 3, 2, 3, new Vector4()); assertEquals(new Vector4(2, -3, 4, -6), vec4); assertEquals(new Vector4(2, -3, 4, -6), vec4B); vec1.multiplyLocal(0.5, 0.5, 0.5, 0.5); assertEquals(new Vector4(0.5, -0.5, 1.0, -1.0), vec1); vec1.multiplyLocal(vec2); assertEquals(new Vector4(0.5, 0.5, 2.0, 2.0), vec1); }