From 278a947de1668c1a376ed98c46eb2e057a622318 Mon Sep 17 00:00:00 2001 From: Michael Bayne Date: Fri, 18 May 2012 13:42:45 -0700 Subject: [PATCH] Added a bunch of stuff at Stefan's request. - Matrix3: add, addLocal, setToZero - Matrix4: extractRotationScale, setToRotationScale, setToZero - Vector3: abs, absLocal - Vector4: negate, negateLocal, abs, absLocal, mult(v), multLocal(v) --- src/main/java/pythagoras/d/IMatrix3.java | 14 ++++++ src/main/java/pythagoras/d/IMatrix4.java | 7 +++ src/main/java/pythagoras/d/IVector3.java | 17 ++++++- src/main/java/pythagoras/d/IVector4.java | 46 ++++++++++++++++- src/main/java/pythagoras/d/Matrix3.java | 32 ++++++++++++ src/main/java/pythagoras/d/Matrix4.java | 35 ++++++++++++- src/main/java/pythagoras/d/Vector3.java | 19 +++++++ src/main/java/pythagoras/d/Vector4.java | 63 ++++++++++++++++++++++-- src/main/java/pythagoras/f/IMatrix3.java | 14 ++++++ src/main/java/pythagoras/f/IMatrix4.java | 7 +++ src/main/java/pythagoras/f/IVector3.java | 17 ++++++- src/main/java/pythagoras/f/IVector4.java | 46 ++++++++++++++++- src/main/java/pythagoras/f/Matrix3.java | 32 ++++++++++++ src/main/java/pythagoras/f/Matrix4.java | 35 ++++++++++++- src/main/java/pythagoras/f/Vector3.java | 19 +++++++ src/main/java/pythagoras/f/Vector4.java | 63 ++++++++++++++++++++++-- 16 files changed, 450 insertions(+), 16 deletions(-) diff --git a/src/main/java/pythagoras/d/IMatrix3.java b/src/main/java/pythagoras/d/IMatrix3.java index a86b7e1..bf290a0 100644 --- a/src/main/java/pythagoras/d/IMatrix3.java +++ b/src/main/java/pythagoras/d/IMatrix3.java @@ -77,6 +77,20 @@ interface IMatrix3 */ Matrix3 mult (IMatrix3 other, Matrix3 result); + /** + * Adds this matrix to another. + * + * @return a new matrix containing the result. + */ + Matrix3 add (IMatrix3 other); + + /** + * Adds this matrix to another and stores the result in the object provided. + * + * @return a reference to the result matrix, for chaining. + */ + Matrix3 add (IMatrix3 other, Matrix3 result); + /** * Determines whether this matrix represents an affine transformation. */ diff --git a/src/main/java/pythagoras/d/IMatrix4.java b/src/main/java/pythagoras/d/IMatrix4.java index 34b7f73..04f04c5 100644 --- a/src/main/java/pythagoras/d/IMatrix4.java +++ b/src/main/java/pythagoras/d/IMatrix4.java @@ -277,6 +277,13 @@ public interface IMatrix4 */ Quaternion extractRotation (Quaternion result); + /** + * Extracts the rotation and scale components and places them in the provided result. + * + * @return a reference to {@code result}, for chaining. + */ + Matrix3 extractRotationScale (Matrix3 result); + /** * Extracts the scale component of the matrix. * diff --git a/src/main/java/pythagoras/d/IVector3.java b/src/main/java/pythagoras/d/IVector3.java index 30cfab5..742138c 100644 --- a/src/main/java/pythagoras/d/IVector3.java +++ b/src/main/java/pythagoras/d/IVector3.java @@ -60,6 +60,20 @@ public interface IVector3 */ Vector3 negate (Vector3 result); + /** + * Absolute-values this vector. + * + * @return a new vector containing the result. + */ + Vector3 abs (); + + /** + * Absolute-values this vector, storing the result in the supplied object. + * + * @return a reference to the result, for chaining. + */ + Vector3 abs (Vector3 result); + /** * Normalizes this vector. * @@ -138,12 +152,13 @@ public interface IVector3 * @return a new vector containing the result. */ Vector3 add (IVector3 other); + /** * Adds a vector to this one, storing the result in the object provided. * * @return a reference to the result, for chaining. */ - public IVector3 add (IVector3 other, Vector3 result); + Vector3 add (IVector3 other, Vector3 result); /** * Subtracts a vector from this one. diff --git a/src/main/java/pythagoras/d/IVector4.java b/src/main/java/pythagoras/d/IVector4.java index 521383f..af85641 100644 --- a/src/main/java/pythagoras/d/IVector4.java +++ b/src/main/java/pythagoras/d/IVector4.java @@ -35,17 +35,59 @@ public interface IVector4 */ boolean epsilonEquals (IVector4 other, double epsilon); + /** + * Negates this vector. + * + * @return a new vector containing the result. + */ + Vector4 negate (); + + /** + * Negates this vector, storing the result in the supplied object. + * + * @return a reference to the result, for chaining. + */ + Vector4 negate (Vector4 result); + + /** + * Absolute-values this vector. + * + * @return a new vector containing the result. + */ + Vector4 abs (); + + /** + * Absolute-values this vector, storing the result in the supplied object. + * + * @return a reference to the result, for chaining. + */ + Vector4 abs (Vector4 result); + + /** + * Multiplies this vector by a scalar. + * + * @return a new vector containing the result. + */ + Vector4 mult (double v); + + /** + * Multiplies this vector by a scalar and places the result in the supplied object. + * + * @return a reference to the result, for chaining. + */ + Vector4 mult (double v, Vector4 result); + /** * Multiplies this vector by a matrix (V * M). * * @return a new vector containing the result. */ - IVector4 mult (IMatrix4 matrix); + Vector4 mult (IMatrix4 matrix); /** * Multiplies this vector by a matrix (V * M) and stores the result in the object provided. * * @return a reference to the result vector, for chaining. */ - IVector4 mult (IMatrix4 matrix, Vector4 result); + Vector4 mult (IMatrix4 matrix, Vector4 result); } diff --git a/src/main/java/pythagoras/d/Matrix3.java b/src/main/java/pythagoras/d/Matrix3.java index a9a769a..9fdc3d0 100644 --- a/src/main/java/pythagoras/d/Matrix3.java +++ b/src/main/java/pythagoras/d/Matrix3.java @@ -134,6 +134,17 @@ public class Matrix3 implements IMatrix3, Serializable 0f, 0f, 1f); } + /** + * Sets this matrix to all zeroes. + * + * @return a reference to this matrix, for chaining. + */ + public Matrix3 setToZero () { + return set(0f, 0f, 0f, + 0f, 0f, 0f, + 0f, 0f, 0f); + } + /** * Sets this to a rotation matrix that rotates one vector onto another. * @@ -337,6 +348,15 @@ public class Matrix3 implements IMatrix3, Serializable return mult(other, this); } + /** + * Adds {@code other} to this matrix, in place. + * + * @return a reference to this matrix, for chaining. + */ + public Matrix3 addLocal (IMatrix3 other) { + return add(other, this); + } + /** * Multiplies this matrix in-place by another, treating the matricees as affine. * @@ -552,6 +572,18 @@ public class Matrix3 implements IMatrix3, Serializable m02*om20 + m12*om21 + m22*om22); } + @Override // from IMatrix3 + public Matrix3 add (IMatrix3 other) { + return add(other, new Matrix3()); + } + + @Override // from IMatrix3 + public Matrix3 add (IMatrix3 other, Matrix3 result) { + return result.set(m00 + other.m00(), m01 + other.m01(), m02 + other.m02(), + m10 + other.m10(), m11 + other.m11(), m12 + other.m12(), + m20 + other.m20(), m21 + other.m21(), m22 + other.m22()); + } + @Override // from IMatrix3 public boolean isAffine () { return (m02 == 0f && m12 == 0f && m22 == 1f); diff --git a/src/main/java/pythagoras/d/Matrix4.java b/src/main/java/pythagoras/d/Matrix4.java index 46c1a1a..1d83b09 100644 --- a/src/main/java/pythagoras/d/Matrix4.java +++ b/src/main/java/pythagoras/d/Matrix4.java @@ -81,6 +81,18 @@ public final class Matrix4 implements IMatrix4, Serializable 0f, 0f, 0f, 1f); } + /** + * Sets this matrix to all zeroes. + * + * @return a reference to this matrix, for chaining. + */ + public Matrix4 setToZero () { + return set(0f, 0f, 0f, 0f, + 0f, 0f, 0f, 0f, + 0f, 0f, 0f, 0f, + 0f, 0f, 0f, 0f); + } + /** * Sets this to a matrix that first rotates, then translates. * @@ -221,6 +233,18 @@ public final class Matrix4 implements IMatrix4, Serializable 0f, 0f, 0f, 1f); } + /** + * Sets this to a rotation plus scale matrix. + * + * @return a reference to this matrix, for chaining. + */ + public Matrix4 setToRotationScale (IMatrix3 rotScale) { + return set(rotScale.m00(), rotScale.m01(), rotScale.m02(), 0f, + rotScale.m10(), rotScale.m11(), rotScale.m12(), 0f, + rotScale.m20(), rotScale.m21(), rotScale.m22(), 0f, + 0, 0, 0, 1); + } + /** * Sets this to a scale matrix. * @@ -424,7 +448,7 @@ public final class Matrix4 implements IMatrix4, Serializable } /** - * Copies the elements of an array. + * Copies the elements of a row-major array. * * @return a reference to this matrix, for chaining. */ @@ -436,7 +460,7 @@ public final class Matrix4 implements IMatrix4, Serializable } /** - * Sets the contents of this matrix from the supplied buffer. + * Sets the contents of this matrix from the supplied (column-major) buffer. * * @return a reference to this matrix, for chaining. */ @@ -997,6 +1021,13 @@ public final class Matrix4 implements IMatrix4, Serializable return result; } + @Override // from IMatrix4 + public Matrix3 extractRotationScale (Matrix3 result) { + return result.set(m00, m01, m02, + m10, m11, m12, + m20, m21, m22); + } + @Override // from IMatrix4 public Vector3 extractScale () { return extractScale(new Vector3()); diff --git a/src/main/java/pythagoras/d/Vector3.java b/src/main/java/pythagoras/d/Vector3.java index 5d985e1..629eb51 100644 --- a/src/main/java/pythagoras/d/Vector3.java +++ b/src/main/java/pythagoras/d/Vector3.java @@ -90,6 +90,15 @@ public class Vector3 implements IVector3, Serializable return negate(this); } + /** + * Absolute-values this vector in-place. + * + * @return a reference to this vector, for chaining. + */ + public Vector3 absLocal () { + return abs(this); + } + /** * Normalizes this vector in-place. * @@ -241,6 +250,16 @@ public class Vector3 implements IVector3, Serializable return result.set(-x, -y, -z); } + @Override // from interface IVector3 + public Vector3 abs () { + return abs(new Vector3()); + } + + @Override // from interface IVector3 + public Vector3 abs (Vector3 result) { + return result.set(Math.abs(x), Math.abs(y), Math.abs(z)); + } + @Override // from interface IVector3 public Vector3 normalize () { return normalize(new Vector3()); diff --git a/src/main/java/pythagoras/d/Vector4.java b/src/main/java/pythagoras/d/Vector4.java index 90fa042..6dca2aa 100644 --- a/src/main/java/pythagoras/d/Vector4.java +++ b/src/main/java/pythagoras/d/Vector4.java @@ -92,12 +92,39 @@ public class Vector4 implements IVector4, Serializable return this; } + /** + * Negates this vector in-place. + * + * @return a reference to this vector, for chaining. + */ + public Vector4 negateLocal () { + return negate(this); + } + + /** + * Absolute-values this vector in-place. + * + * @return a reference to this vector, for chaining. + */ + public Vector4 absLocal () { + return abs(this); + } + + /** + * Multiplies this vector by a scalar and stores the result back in this vector. + * + * @return a reference to this vector, for chaining. + */ + public Vector4 multLocal (double v) { + return mult(v, this); + } + /** * Multiplies this vector by a matrix (V * M) and stores the result back in this vector. * * @return a reference to this vector, for chaining. */ - public IVector4 multLocal (IMatrix4 matrix) { + public Vector4 multLocal (IMatrix4 matrix) { return mult(matrix, this); } @@ -134,13 +161,43 @@ public class Vector4 implements IVector4, Serializable Math.abs(w - other.w()) < epsilon); } + @Override // from interface IVector4 + public Vector4 negate () { + return negate(new Vector4()); + } + + @Override // from interface IVector4 + public Vector4 negate (Vector4 result) { + return result.set(-x, -y, -z, -w); + } + + @Override // from interface IVector4 + public Vector4 abs () { + return abs(new Vector4()); + } + + @Override // from interface IVector4 + public Vector4 abs (Vector4 result) { + return result.set(Math.abs(x), Math.abs(y), Math.abs(z), Math.abs(w)); + } + + @Override // from interface IVector4 + public Vector4 mult (double v) { + return mult(v, new Vector4()); + } + + @Override // from interface IVector4 + public Vector4 mult (double v, Vector4 result) { + return result.set(x*v, y*v, z*v, w*v); + } + @Override // from IVector4 - public IVector4 mult (IMatrix4 matrix) { + public Vector4 mult (IMatrix4 matrix) { return mult(matrix, new Vector4()); } @Override // from IVector4 - public IVector4 mult (IMatrix4 matrix, Vector4 result) { + public Vector4 mult (IMatrix4 matrix, Vector4 result) { double m00 = matrix.m00(), m10 = matrix.m10(), m20 = matrix.m20(), m30 = matrix.m30(); double m01 = matrix.m01(), m11 = matrix.m11(), m21 = matrix.m21(), m31 = matrix.m31(); double m02 = matrix.m02(), m12 = matrix.m12(), m22 = matrix.m22(), m32 = matrix.m32(); diff --git a/src/main/java/pythagoras/f/IMatrix3.java b/src/main/java/pythagoras/f/IMatrix3.java index 5520319..eac9a8e 100644 --- a/src/main/java/pythagoras/f/IMatrix3.java +++ b/src/main/java/pythagoras/f/IMatrix3.java @@ -77,6 +77,20 @@ interface IMatrix3 */ Matrix3 mult (IMatrix3 other, Matrix3 result); + /** + * Adds this matrix to another. + * + * @return a new matrix containing the result. + */ + Matrix3 add (IMatrix3 other); + + /** + * Adds this matrix to another and stores the result in the object provided. + * + * @return a reference to the result matrix, for chaining. + */ + Matrix3 add (IMatrix3 other, Matrix3 result); + /** * Determines whether this matrix represents an affine transformation. */ diff --git a/src/main/java/pythagoras/f/IMatrix4.java b/src/main/java/pythagoras/f/IMatrix4.java index 7df310c..0e05ec7 100644 --- a/src/main/java/pythagoras/f/IMatrix4.java +++ b/src/main/java/pythagoras/f/IMatrix4.java @@ -277,6 +277,13 @@ public interface IMatrix4 */ Quaternion extractRotation (Quaternion result); + /** + * Extracts the rotation and scale components and places them in the provided result. + * + * @return a reference to {@code result}, for chaining. + */ + Matrix3 extractRotationScale (Matrix3 result); + /** * Extracts the scale component of the matrix. * diff --git a/src/main/java/pythagoras/f/IVector3.java b/src/main/java/pythagoras/f/IVector3.java index 7fa2270..8f84a81 100644 --- a/src/main/java/pythagoras/f/IVector3.java +++ b/src/main/java/pythagoras/f/IVector3.java @@ -60,6 +60,20 @@ public interface IVector3 */ Vector3 negate (Vector3 result); + /** + * Absolute-values this vector. + * + * @return a new vector containing the result. + */ + Vector3 abs (); + + /** + * Absolute-values this vector, storing the result in the supplied object. + * + * @return a reference to the result, for chaining. + */ + Vector3 abs (Vector3 result); + /** * Normalizes this vector. * @@ -138,12 +152,13 @@ public interface IVector3 * @return a new vector containing the result. */ Vector3 add (IVector3 other); + /** * Adds a vector to this one, storing the result in the object provided. * * @return a reference to the result, for chaining. */ - public IVector3 add (IVector3 other, Vector3 result); + Vector3 add (IVector3 other, Vector3 result); /** * Subtracts a vector from this one. diff --git a/src/main/java/pythagoras/f/IVector4.java b/src/main/java/pythagoras/f/IVector4.java index ea91fa4..634d227 100644 --- a/src/main/java/pythagoras/f/IVector4.java +++ b/src/main/java/pythagoras/f/IVector4.java @@ -35,17 +35,59 @@ public interface IVector4 */ boolean epsilonEquals (IVector4 other, float epsilon); + /** + * Negates this vector. + * + * @return a new vector containing the result. + */ + Vector4 negate (); + + /** + * Negates this vector, storing the result in the supplied object. + * + * @return a reference to the result, for chaining. + */ + Vector4 negate (Vector4 result); + + /** + * Absolute-values this vector. + * + * @return a new vector containing the result. + */ + Vector4 abs (); + + /** + * Absolute-values this vector, storing the result in the supplied object. + * + * @return a reference to the result, for chaining. + */ + Vector4 abs (Vector4 result); + + /** + * Multiplies this vector by a scalar. + * + * @return a new vector containing the result. + */ + Vector4 mult (float v); + + /** + * Multiplies this vector by a scalar and places the result in the supplied object. + * + * @return a reference to the result, for chaining. + */ + Vector4 mult (float v, Vector4 result); + /** * Multiplies this vector by a matrix (V * M). * * @return a new vector containing the result. */ - IVector4 mult (IMatrix4 matrix); + Vector4 mult (IMatrix4 matrix); /** * Multiplies this vector by a matrix (V * M) and stores the result in the object provided. * * @return a reference to the result vector, for chaining. */ - IVector4 mult (IMatrix4 matrix, Vector4 result); + Vector4 mult (IMatrix4 matrix, Vector4 result); } diff --git a/src/main/java/pythagoras/f/Matrix3.java b/src/main/java/pythagoras/f/Matrix3.java index b710052..3eca82f 100644 --- a/src/main/java/pythagoras/f/Matrix3.java +++ b/src/main/java/pythagoras/f/Matrix3.java @@ -134,6 +134,17 @@ public class Matrix3 implements IMatrix3, Serializable 0f, 0f, 1f); } + /** + * Sets this matrix to all zeroes. + * + * @return a reference to this matrix, for chaining. + */ + public Matrix3 setToZero () { + return set(0f, 0f, 0f, + 0f, 0f, 0f, + 0f, 0f, 0f); + } + /** * Sets this to a rotation matrix that rotates one vector onto another. * @@ -337,6 +348,15 @@ public class Matrix3 implements IMatrix3, Serializable return mult(other, this); } + /** + * Adds {@code other} to this matrix, in place. + * + * @return a reference to this matrix, for chaining. + */ + public Matrix3 addLocal (IMatrix3 other) { + return add(other, this); + } + /** * Multiplies this matrix in-place by another, treating the matricees as affine. * @@ -552,6 +572,18 @@ public class Matrix3 implements IMatrix3, Serializable m02*om20 + m12*om21 + m22*om22); } + @Override // from IMatrix3 + public Matrix3 add (IMatrix3 other) { + return add(other, new Matrix3()); + } + + @Override // from IMatrix3 + public Matrix3 add (IMatrix3 other, Matrix3 result) { + return result.set(m00 + other.m00(), m01 + other.m01(), m02 + other.m02(), + m10 + other.m10(), m11 + other.m11(), m12 + other.m12(), + m20 + other.m20(), m21 + other.m21(), m22 + other.m22()); + } + @Override // from IMatrix3 public boolean isAffine () { return (m02 == 0f && m12 == 0f && m22 == 1f); diff --git a/src/main/java/pythagoras/f/Matrix4.java b/src/main/java/pythagoras/f/Matrix4.java index b9f82c6..b06286d 100644 --- a/src/main/java/pythagoras/f/Matrix4.java +++ b/src/main/java/pythagoras/f/Matrix4.java @@ -81,6 +81,18 @@ public final class Matrix4 implements IMatrix4, Serializable 0f, 0f, 0f, 1f); } + /** + * Sets this matrix to all zeroes. + * + * @return a reference to this matrix, for chaining. + */ + public Matrix4 setToZero () { + return set(0f, 0f, 0f, 0f, + 0f, 0f, 0f, 0f, + 0f, 0f, 0f, 0f, + 0f, 0f, 0f, 0f); + } + /** * Sets this to a matrix that first rotates, then translates. * @@ -221,6 +233,18 @@ public final class Matrix4 implements IMatrix4, Serializable 0f, 0f, 0f, 1f); } + /** + * Sets this to a rotation plus scale matrix. + * + * @return a reference to this matrix, for chaining. + */ + public Matrix4 setToRotationScale (IMatrix3 rotScale) { + return set(rotScale.m00(), rotScale.m01(), rotScale.m02(), 0f, + rotScale.m10(), rotScale.m11(), rotScale.m12(), 0f, + rotScale.m20(), rotScale.m21(), rotScale.m22(), 0f, + 0, 0, 0, 1); + } + /** * Sets this to a scale matrix. * @@ -424,7 +448,7 @@ public final class Matrix4 implements IMatrix4, Serializable } /** - * Copies the elements of an array. + * Copies the elements of a row-major array. * * @return a reference to this matrix, for chaining. */ @@ -436,7 +460,7 @@ public final class Matrix4 implements IMatrix4, Serializable } /** - * Sets the contents of this matrix from the supplied buffer. + * Sets the contents of this matrix from the supplied (column-major) buffer. * * @return a reference to this matrix, for chaining. */ @@ -997,6 +1021,13 @@ public final class Matrix4 implements IMatrix4, Serializable return result; } + @Override // from IMatrix4 + public Matrix3 extractRotationScale (Matrix3 result) { + return result.set(m00, m01, m02, + m10, m11, m12, + m20, m21, m22); + } + @Override // from IMatrix4 public Vector3 extractScale () { return extractScale(new Vector3()); diff --git a/src/main/java/pythagoras/f/Vector3.java b/src/main/java/pythagoras/f/Vector3.java index 8979e34..228ff51 100644 --- a/src/main/java/pythagoras/f/Vector3.java +++ b/src/main/java/pythagoras/f/Vector3.java @@ -90,6 +90,15 @@ public class Vector3 implements IVector3, Serializable return negate(this); } + /** + * Absolute-values this vector in-place. + * + * @return a reference to this vector, for chaining. + */ + public Vector3 absLocal () { + return abs(this); + } + /** * Normalizes this vector in-place. * @@ -241,6 +250,16 @@ public class Vector3 implements IVector3, Serializable return result.set(-x, -y, -z); } + @Override // from interface IVector3 + public Vector3 abs () { + return abs(new Vector3()); + } + + @Override // from interface IVector3 + public Vector3 abs (Vector3 result) { + return result.set(Math.abs(x), Math.abs(y), Math.abs(z)); + } + @Override // from interface IVector3 public Vector3 normalize () { return normalize(new Vector3()); diff --git a/src/main/java/pythagoras/f/Vector4.java b/src/main/java/pythagoras/f/Vector4.java index d8c53f5..b3438d0 100644 --- a/src/main/java/pythagoras/f/Vector4.java +++ b/src/main/java/pythagoras/f/Vector4.java @@ -92,12 +92,39 @@ public class Vector4 implements IVector4, Serializable return this; } + /** + * Negates this vector in-place. + * + * @return a reference to this vector, for chaining. + */ + public Vector4 negateLocal () { + return negate(this); + } + + /** + * Absolute-values this vector in-place. + * + * @return a reference to this vector, for chaining. + */ + public Vector4 absLocal () { + return abs(this); + } + + /** + * Multiplies this vector by a scalar and stores the result back in this vector. + * + * @return a reference to this vector, for chaining. + */ + public Vector4 multLocal (float v) { + return mult(v, this); + } + /** * Multiplies this vector by a matrix (V * M) and stores the result back in this vector. * * @return a reference to this vector, for chaining. */ - public IVector4 multLocal (IMatrix4 matrix) { + public Vector4 multLocal (IMatrix4 matrix) { return mult(matrix, this); } @@ -134,13 +161,43 @@ public class Vector4 implements IVector4, Serializable Math.abs(w - other.w()) < epsilon); } + @Override // from interface IVector4 + public Vector4 negate () { + return negate(new Vector4()); + } + + @Override // from interface IVector4 + public Vector4 negate (Vector4 result) { + return result.set(-x, -y, -z, -w); + } + + @Override // from interface IVector4 + public Vector4 abs () { + return abs(new Vector4()); + } + + @Override // from interface IVector4 + public Vector4 abs (Vector4 result) { + return result.set(Math.abs(x), Math.abs(y), Math.abs(z), Math.abs(w)); + } + + @Override // from interface IVector4 + public Vector4 mult (float v) { + return mult(v, new Vector4()); + } + + @Override // from interface IVector4 + public Vector4 mult (float v, Vector4 result) { + return result.set(x*v, y*v, z*v, w*v); + } + @Override // from IVector4 - public IVector4 mult (IMatrix4 matrix) { + public Vector4 mult (IMatrix4 matrix) { return mult(matrix, new Vector4()); } @Override // from IVector4 - public IVector4 mult (IMatrix4 matrix, Vector4 result) { + public Vector4 mult (IMatrix4 matrix, Vector4 result) { float m00 = matrix.m00(), m10 = matrix.m10(), m20 = matrix.m20(), m30 = matrix.m30(); float m01 = matrix.m01(), m11 = matrix.m11(), m21 = matrix.m21(), m31 = matrix.m31(); float m02 = matrix.m02(), m12 = matrix.m12(), m22 = matrix.m22(), m32 = matrix.m32();