diff --git a/src/java/org/lwjgl/vector/Matrix.java b/src/java/org/lwjgl/vector/Matrix.java index 66fac610..1ef94da2 100644 --- a/src/java/org/lwjgl/vector/Matrix.java +++ b/src/java/org/lwjgl/vector/Matrix.java @@ -36,7 +36,8 @@ import java.nio.FloatBuffer; /** * $Id$ * - * Base class for matrices. + * Base class for matrices. When a matrix is constructed it will be the identity + * matrix unless otherwise stated. * * @author cix_foo * @version $Revision$ diff --git a/src/java/org/lwjgl/vector/Matrix2f.java b/src/java/org/lwjgl/vector/Matrix2f.java index 03a44cd0..7f1acc07 100644 --- a/src/java/org/lwjgl/vector/Matrix2f.java +++ b/src/java/org/lwjgl/vector/Matrix2f.java @@ -84,8 +84,8 @@ public class Matrix2f extends Matrix { public Matrix load(FloatBuffer buf) { m00 = buf.get(); - m10 = buf.get(); m01 = buf.get(); + m10 = buf.get(); m11 = buf.get(); return this; @@ -101,8 +101,8 @@ public class Matrix2f extends Matrix { public Matrix loadTranspose(FloatBuffer buf) { m00 = buf.get(); - m01 = buf.get(); m10 = buf.get(); + m01 = buf.get(); m11 = buf.get(); return this; @@ -115,8 +115,8 @@ public class Matrix2f extends Matrix { */ public Matrix store(FloatBuffer buf) { buf.put(m00); - buf.put(m10); buf.put(m01); + buf.put(m10); buf.put(m11); return this; } @@ -128,8 +128,8 @@ public class Matrix2f extends Matrix { */ public Matrix storeTranspose(FloatBuffer buf) { buf.put(m00); - buf.put(m01); buf.put(m10); + buf.put(m01); buf.put(m11); return this; } @@ -293,6 +293,7 @@ public class Matrix2f extends Matrix { * @return this */ public Matrix invert() { + assert false : "Not implemented yet!"; return this; } @@ -356,6 +357,7 @@ public class Matrix2f extends Matrix { * @see org.lwjgl.vector.Matrix#determinant() */ public float determinant() { + assert false : "Not implemented yet!"; return 0; } diff --git a/src/java/org/lwjgl/vector/Matrix3f.java b/src/java/org/lwjgl/vector/Matrix3f.java index d18fa6c1..ee5e67c9 100644 --- a/src/java/org/lwjgl/vector/Matrix3f.java +++ b/src/java/org/lwjgl/vector/Matrix3f.java @@ -90,13 +90,13 @@ public class Matrix3f extends Matrix { public Matrix load(FloatBuffer buf) { m00 = buf.get(); - m10 = buf.get(); - m20 = buf.get(); m01 = buf.get(); - m11 = buf.get(); - m21 = buf.get(); m02 = buf.get(); + m10 = buf.get(); + m11 = buf.get(); m12 = buf.get(); + m20 = buf.get(); + m21 = buf.get(); m22 = buf.get(); return this; @@ -112,13 +112,13 @@ public class Matrix3f extends Matrix { public Matrix loadTranspose(FloatBuffer buf) { m00 = buf.get(); - m01 = buf.get(); - m02 = buf.get(); m10 = buf.get(); - m11 = buf.get(); - m12 = buf.get(); m20 = buf.get(); + m01 = buf.get(); + m11 = buf.get(); m21 = buf.get(); + m02 = buf.get(); + m12 = buf.get(); m22 = buf.get(); return this; @@ -131,13 +131,13 @@ public class Matrix3f extends Matrix { */ public Matrix store(FloatBuffer buf) { buf.put(m00); - buf.put(m10); - buf.put(m20); buf.put(m01); - buf.put(m11); - buf.put(m21); buf.put(m02); + buf.put(m10); + buf.put(m11); buf.put(m12); + buf.put(m20); + buf.put(m21); buf.put(m22); return this; } @@ -149,13 +149,13 @@ public class Matrix3f extends Matrix { */ public Matrix storeTranspose(FloatBuffer buf) { buf.put(m00); - buf.put(m01); - buf.put(m02); buf.put(m10); - buf.put(m11); - buf.put(m12); buf.put(m20); + buf.put(m01); + buf.put(m11); buf.put(m21); + buf.put(m02); + buf.put(m12); buf.put(m22); return this; } @@ -366,6 +366,7 @@ public class Matrix3f extends Matrix { * @return this */ public Matrix invert() { + assert false : "Not implemented yet!"; return this; } diff --git a/src/java/org/lwjgl/vector/Matrix4f.java b/src/java/org/lwjgl/vector/Matrix4f.java index 9ecf47fb..1f6ae408 100644 --- a/src/java/org/lwjgl/vector/Matrix4f.java +++ b/src/java/org/lwjgl/vector/Matrix4f.java @@ -39,6 +39,16 @@ import java.nio.FloatBuffer; * @author foo */ public class Matrix4f extends Matrix { + + public float m00 = 1.0f, m01, m02, m03, m10, m11 = 1.0f, m12, m13, m20, m21, m22 = 1.0f, m23, m30, m31, m32, m33 = 1.0f; + + /** + * Construct a Matrix4f + */ + public Matrix4f() { + super(); + } + /** * Set this matrix to be the identity matrix. * @return this @@ -91,15 +101,6 @@ public class Matrix4f extends Matrix { } - - public float m00 = 1.0f, m01, m02, m03, m10, m11 = 1.0f, m12, m13, m20, m21, m22 = 1.0f, m23, m30, m31, m32, m33 = 1.0f; - - /** - * Construct a Matrix4f - */ - public Matrix4f() { - super(); - } /** * Load from another matrix4f * @param src The source matrix @@ -137,20 +138,20 @@ public class Matrix4f extends Matrix { public Matrix load(FloatBuffer buf) { m00 = buf.get(); - m10 = buf.get(); - m20 = buf.get(); - m30 = buf.get(); m01 = buf.get(); - m11 = buf.get(); - m21 = buf.get(); - m31 = buf.get(); m02 = buf.get(); - m12 = buf.get(); - m22 = buf.get(); - m32 = buf.get(); m03 = buf.get(); + m10 = buf.get(); + m11 = buf.get(); + m12 = buf.get(); m13 = buf.get(); + m20 = buf.get(); + m21 = buf.get(); + m22 = buf.get(); m23 = buf.get(); + m30 = buf.get(); + m31 = buf.get(); + m32 = buf.get(); m33 = buf.get(); return this; @@ -166,20 +167,20 @@ public class Matrix4f extends Matrix { public Matrix loadTranspose(FloatBuffer buf) { m00 = buf.get(); - m01 = buf.get(); - m02 = buf.get(); - m03 = buf.get(); m10 = buf.get(); - m11 = buf.get(); - m12 = buf.get(); - m13 = buf.get(); m20 = buf.get(); - m21 = buf.get(); - m22 = buf.get(); - m23 = buf.get(); m30 = buf.get(); + m01 = buf.get(); + m11 = buf.get(); + m21 = buf.get(); m31 = buf.get(); + m02 = buf.get(); + m12 = buf.get(); + m22 = buf.get(); m32 = buf.get(); + m03 = buf.get(); + m13 = buf.get(); + m23 = buf.get(); m33 = buf.get(); return this; @@ -192,20 +193,20 @@ public class Matrix4f extends Matrix { */ public Matrix store(FloatBuffer buf) { buf.put(m00); - buf.put(m10); - buf.put(m20); - buf.put(m30); buf.put(m01); - buf.put(m11); - buf.put(m21); - buf.put(m31); buf.put(m02); - buf.put(m12); - buf.put(m22); - buf.put(m32); buf.put(m03); + buf.put(m10); + buf.put(m11); + buf.put(m12); buf.put(m13); + buf.put(m20); + buf.put(m21); + buf.put(m22); buf.put(m23); + buf.put(m30); + buf.put(m31); + buf.put(m32); buf.put(m33); return this; } @@ -217,20 +218,20 @@ public class Matrix4f extends Matrix { */ public Matrix storeTranspose(FloatBuffer buf) { buf.put(m00); - buf.put(m01); - buf.put(m02); - buf.put(m03); buf.put(m10); - buf.put(m11); - buf.put(m12); - buf.put(m13); buf.put(m20); - buf.put(m21); - buf.put(m22); - buf.put(m23); buf.put(m30); + buf.put(m01); + buf.put(m11); + buf.put(m21); buf.put(m31); + buf.put(m02); + buf.put(m12); + buf.put(m22); buf.put(m32); + buf.put(m03); + buf.put(m13); + buf.put(m23); buf.put(m33); return this; } @@ -424,6 +425,76 @@ public class Matrix4f extends Matrix { return this; } + /** + * Translate this matrix + * @param vec The vector to translate by + * @return this + */ + public Matrix4f translate(Vector2f vec) { + m30 += m00 * vec.x + m10 * vec.y; + m31 += m01 * vec.x + m11 * vec.y; + m32 += m02 * vec.x + m12 * vec.y; + m33 += m03 * vec.x + m13 * vec.y; + return this; + } + + /** + * Translate this matrix + * @param vec The vector to translate by + * @return this + */ + public Matrix4f translate(Vector3f vec) { + m30 += m00 * vec.x + m10 * vec.y + m20 * vec.z; + m31 += m01 * vec.x + m11 * vec.y + m21 * vec.z; + m32 += m02 * vec.x + m12 * vec.y + m22 * vec.z; + m33 += m03 * vec.x + m13 * vec.y + m23 * vec.z; + return this; + } + + + + /** + * Translate this matrix and stash the result in another matrix + * @param vec The vector to translate by + * @param dest The destination matrix or null if a new matrix is to be created + * @return the translated matrix + */ + public Matrix4f translate(Vector3f vec, Matrix4f dest) { + if (dest == null) + dest = new Matrix4f(); + else if (dest == this) + return translate(vec); + + dest.m30 += m00 * vec.x + m10 * vec.y + m20 * vec.z; + dest.m31 += m01 * vec.x + m11 * vec.y + m21 * vec.z; + dest.m32 += m02 * vec.x + m12 * vec.y + m22 * vec.z; + dest.m33 += m03 * vec.x + m13 * vec.y + m23 * vec.z; + + return dest; + } + + /** + * Translate this matrix and stash the result in another matrix + * @param vec The vector to translate by + * @param dest The destination matrix or null if a new matrix is to be created + * @return the translated matrix + */ + public Matrix4f translate(Vector2f vec, Matrix4f dest) { + if (dest == null) + dest = new Matrix4f(); + else if (dest == this) + return translate(vec); + + dest.m30 += m00 * vec.x + m10 * vec.y; + dest.m31 += m01 * vec.x + m11 * vec.y; + dest.m32 += m02 * vec.x + m12 * vec.y; + dest.m33 += m03 * vec.x + m13 * vec.y; + + return dest; + } + + + /** * Transpose this matrix and place the result in another matrix * @param dest The destination matrix or null if a new matrix is to be created @@ -488,6 +559,7 @@ public class Matrix4f extends Matrix { * @return this */ public Matrix invert() { + assert false : "Not implemented yet!"; return this; } diff --git a/src/java/org/lwjgl/vector/Vector.java b/src/java/org/lwjgl/vector/Vector.java index 1ab7a09f..a8005cba 100644 --- a/src/java/org/lwjgl/vector/Vector.java +++ b/src/java/org/lwjgl/vector/Vector.java @@ -83,7 +83,7 @@ public abstract class Vector { * Normalise this vector * @return this */ - public final Vector normalise() { + public final Vector normalize() { float l = 1.0f / length(); return scale(l); } diff --git a/src/java/org/lwjgl/vector/Vector2f.java b/src/java/org/lwjgl/vector/Vector2f.java index 390ef804..c2aae802 100644 --- a/src/java/org/lwjgl/vector/Vector2f.java +++ b/src/java/org/lwjgl/vector/Vector2f.java @@ -151,7 +151,7 @@ public class Vector2f extends Vector { /** * The dot product of two vectors is calculated as - * v1.x * v2.x + v1.y * v2.y + * v1.x * v2.x + v1.y * v2.y + v1.z * v2.z * @param left The LHS vector * @param right The RHS vector * @return left dot right @@ -159,6 +159,8 @@ public class Vector2f extends Vector { public static float dot(Vector2f left, Vector2f right) { return left.x * right.x + left.y * right.y; } + + /** * Calculate the angle between two vectors, in degrees diff --git a/src/java/org/lwjgl/vector/Vector3f.java b/src/java/org/lwjgl/vector/Vector3f.java index 6ed71cf3..36588bab 100644 --- a/src/java/org/lwjgl/vector/Vector3f.java +++ b/src/java/org/lwjgl/vector/Vector3f.java @@ -143,6 +143,32 @@ public class Vector3f extends Vector { return dest.set(left.x - right.x, left.y - right.y, left.z - right.z); } } + + /** + * The cross product of two vectors. + * + * @param left The LHS vector + * @param right The RHS vector + * @param dest The destination result, or null if a new vector is to be created + * @return left cross right + */ + public static Vector3f cross( + Vector3f left, + Vector3f right, + Vector3f dest) + { + + if (dest == null) + dest = new Vector3f(); + + dest.set( + left.y * right.z - left.z * right.y, + right.x * left.z - right.z * left.x, + left.x * right.y - left.y * right.x + ); + + return dest; + }