This commit is contained in:
Caspian Rychlik-Prince 2002-08-28 00:05:45 +00:00
parent 88def41eb8
commit 0e07f02d50
7 changed files with 172 additions and 68 deletions

View File

@ -36,7 +36,8 @@ import java.nio.FloatBuffer;
/** /**
* $Id$ * $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 <cix_foo@users.sourceforge.net> * @author cix_foo <cix_foo@users.sourceforge.net>
* @version $Revision$ * @version $Revision$

View File

@ -84,8 +84,8 @@ public class Matrix2f extends Matrix {
public Matrix load(FloatBuffer buf) { public Matrix load(FloatBuffer buf) {
m00 = buf.get(); m00 = buf.get();
m10 = buf.get();
m01 = buf.get(); m01 = buf.get();
m10 = buf.get();
m11 = buf.get(); m11 = buf.get();
return this; return this;
@ -101,8 +101,8 @@ public class Matrix2f extends Matrix {
public Matrix loadTranspose(FloatBuffer buf) { public Matrix loadTranspose(FloatBuffer buf) {
m00 = buf.get(); m00 = buf.get();
m01 = buf.get();
m10 = buf.get(); m10 = buf.get();
m01 = buf.get();
m11 = buf.get(); m11 = buf.get();
return this; return this;
@ -115,8 +115,8 @@ public class Matrix2f extends Matrix {
*/ */
public Matrix store(FloatBuffer buf) { public Matrix store(FloatBuffer buf) {
buf.put(m00); buf.put(m00);
buf.put(m10);
buf.put(m01); buf.put(m01);
buf.put(m10);
buf.put(m11); buf.put(m11);
return this; return this;
} }
@ -128,8 +128,8 @@ public class Matrix2f extends Matrix {
*/ */
public Matrix storeTranspose(FloatBuffer buf) { public Matrix storeTranspose(FloatBuffer buf) {
buf.put(m00); buf.put(m00);
buf.put(m01);
buf.put(m10); buf.put(m10);
buf.put(m01);
buf.put(m11); buf.put(m11);
return this; return this;
} }
@ -293,6 +293,7 @@ public class Matrix2f extends Matrix {
* @return this * @return this
*/ */
public Matrix invert() { public Matrix invert() {
assert false : "Not implemented yet!";
return this; return this;
} }
@ -356,6 +357,7 @@ public class Matrix2f extends Matrix {
* @see org.lwjgl.vector.Matrix#determinant() * @see org.lwjgl.vector.Matrix#determinant()
*/ */
public float determinant() { public float determinant() {
assert false : "Not implemented yet!";
return 0; return 0;
} }

View File

@ -90,13 +90,13 @@ public class Matrix3f extends Matrix {
public Matrix load(FloatBuffer buf) { public Matrix load(FloatBuffer buf) {
m00 = buf.get(); m00 = buf.get();
m10 = buf.get();
m20 = buf.get();
m01 = buf.get(); m01 = buf.get();
m11 = buf.get();
m21 = buf.get();
m02 = buf.get(); m02 = buf.get();
m10 = buf.get();
m11 = buf.get();
m12 = buf.get(); m12 = buf.get();
m20 = buf.get();
m21 = buf.get();
m22 = buf.get(); m22 = buf.get();
return this; return this;
@ -112,13 +112,13 @@ public class Matrix3f extends Matrix {
public Matrix loadTranspose(FloatBuffer buf) { public Matrix loadTranspose(FloatBuffer buf) {
m00 = buf.get(); m00 = buf.get();
m01 = buf.get();
m02 = buf.get();
m10 = buf.get(); m10 = buf.get();
m11 = buf.get();
m12 = buf.get();
m20 = buf.get(); m20 = buf.get();
m01 = buf.get();
m11 = buf.get();
m21 = buf.get(); m21 = buf.get();
m02 = buf.get();
m12 = buf.get();
m22 = buf.get(); m22 = buf.get();
return this; return this;
@ -131,13 +131,13 @@ public class Matrix3f extends Matrix {
*/ */
public Matrix store(FloatBuffer buf) { public Matrix store(FloatBuffer buf) {
buf.put(m00); buf.put(m00);
buf.put(m10);
buf.put(m20);
buf.put(m01); buf.put(m01);
buf.put(m11);
buf.put(m21);
buf.put(m02); buf.put(m02);
buf.put(m10);
buf.put(m11);
buf.put(m12); buf.put(m12);
buf.put(m20);
buf.put(m21);
buf.put(m22); buf.put(m22);
return this; return this;
} }
@ -149,13 +149,13 @@ public class Matrix3f extends Matrix {
*/ */
public Matrix storeTranspose(FloatBuffer buf) { public Matrix storeTranspose(FloatBuffer buf) {
buf.put(m00); buf.put(m00);
buf.put(m01);
buf.put(m02);
buf.put(m10); buf.put(m10);
buf.put(m11);
buf.put(m12);
buf.put(m20); buf.put(m20);
buf.put(m01);
buf.put(m11);
buf.put(m21); buf.put(m21);
buf.put(m02);
buf.put(m12);
buf.put(m22); buf.put(m22);
return this; return this;
} }
@ -366,6 +366,7 @@ public class Matrix3f extends Matrix {
* @return this * @return this
*/ */
public Matrix invert() { public Matrix invert() {
assert false : "Not implemented yet!";
return this; return this;
} }

View File

@ -39,6 +39,16 @@ import java.nio.FloatBuffer;
* @author foo * @author foo
*/ */
public class Matrix4f extends Matrix { 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. * Set this matrix to be the identity matrix.
* @return this * @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 * Load from another matrix4f
* @param src The source matrix * @param src The source matrix
@ -137,20 +138,20 @@ public class Matrix4f extends Matrix {
public Matrix load(FloatBuffer buf) { public Matrix load(FloatBuffer buf) {
m00 = buf.get(); m00 = buf.get();
m10 = buf.get();
m20 = buf.get();
m30 = buf.get();
m01 = buf.get(); m01 = buf.get();
m11 = buf.get();
m21 = buf.get();
m31 = buf.get();
m02 = buf.get(); m02 = buf.get();
m12 = buf.get();
m22 = buf.get();
m32 = buf.get();
m03 = buf.get(); m03 = buf.get();
m10 = buf.get();
m11 = buf.get();
m12 = buf.get();
m13 = buf.get(); m13 = buf.get();
m20 = buf.get();
m21 = buf.get();
m22 = buf.get();
m23 = buf.get(); m23 = buf.get();
m30 = buf.get();
m31 = buf.get();
m32 = buf.get();
m33 = buf.get(); m33 = buf.get();
return this; return this;
@ -166,20 +167,20 @@ public class Matrix4f extends Matrix {
public Matrix loadTranspose(FloatBuffer buf) { public Matrix loadTranspose(FloatBuffer buf) {
m00 = buf.get(); m00 = buf.get();
m01 = buf.get();
m02 = buf.get();
m03 = buf.get();
m10 = buf.get(); m10 = buf.get();
m11 = buf.get();
m12 = buf.get();
m13 = buf.get();
m20 = buf.get(); m20 = buf.get();
m21 = buf.get();
m22 = buf.get();
m23 = buf.get();
m30 = buf.get(); m30 = buf.get();
m01 = buf.get();
m11 = buf.get();
m21 = buf.get();
m31 = buf.get(); m31 = buf.get();
m02 = buf.get();
m12 = buf.get();
m22 = buf.get();
m32 = buf.get(); m32 = buf.get();
m03 = buf.get();
m13 = buf.get();
m23 = buf.get();
m33 = buf.get(); m33 = buf.get();
return this; return this;
@ -192,20 +193,20 @@ public class Matrix4f extends Matrix {
*/ */
public Matrix store(FloatBuffer buf) { public Matrix store(FloatBuffer buf) {
buf.put(m00); buf.put(m00);
buf.put(m10);
buf.put(m20);
buf.put(m30);
buf.put(m01); buf.put(m01);
buf.put(m11);
buf.put(m21);
buf.put(m31);
buf.put(m02); buf.put(m02);
buf.put(m12);
buf.put(m22);
buf.put(m32);
buf.put(m03); buf.put(m03);
buf.put(m10);
buf.put(m11);
buf.put(m12);
buf.put(m13); buf.put(m13);
buf.put(m20);
buf.put(m21);
buf.put(m22);
buf.put(m23); buf.put(m23);
buf.put(m30);
buf.put(m31);
buf.put(m32);
buf.put(m33); buf.put(m33);
return this; return this;
} }
@ -217,20 +218,20 @@ public class Matrix4f extends Matrix {
*/ */
public Matrix storeTranspose(FloatBuffer buf) { public Matrix storeTranspose(FloatBuffer buf) {
buf.put(m00); buf.put(m00);
buf.put(m01);
buf.put(m02);
buf.put(m03);
buf.put(m10); buf.put(m10);
buf.put(m11);
buf.put(m12);
buf.put(m13);
buf.put(m20); buf.put(m20);
buf.put(m21);
buf.put(m22);
buf.put(m23);
buf.put(m30); buf.put(m30);
buf.put(m01);
buf.put(m11);
buf.put(m21);
buf.put(m31); buf.put(m31);
buf.put(m02);
buf.put(m12);
buf.put(m22);
buf.put(m32); buf.put(m32);
buf.put(m03);
buf.put(m13);
buf.put(m23);
buf.put(m33); buf.put(m33);
return this; return this;
} }
@ -424,6 +425,76 @@ public class Matrix4f extends Matrix {
return this; 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 * 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 * @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 * @return this
*/ */
public Matrix invert() { public Matrix invert() {
assert false : "Not implemented yet!";
return this; return this;
} }

View File

@ -83,7 +83,7 @@ public abstract class Vector {
* Normalise this vector * Normalise this vector
* @return this * @return this
*/ */
public final Vector normalise() { public final Vector normalize() {
float l = 1.0f / length(); float l = 1.0f / length();
return scale(l); return scale(l);
} }

View File

@ -151,7 +151,7 @@ public class Vector2f extends Vector {
/** /**
* The dot product of two vectors is calculated as * 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 left The LHS vector
* @param right The RHS vector * @param right The RHS vector
* @return left dot right * @return left dot right
@ -159,6 +159,8 @@ public class Vector2f extends Vector {
public static float dot(Vector2f left, Vector2f right) { public static float dot(Vector2f left, Vector2f right) {
return left.x * right.x + left.y * right.y; return left.x * right.x + left.y * right.y;
} }
/** /**
* Calculate the angle between two vectors, in degrees * Calculate the angle between two vectors, in degrees

View File

@ -143,6 +143,32 @@ public class Vector3f extends Vector {
return dest.set(left.x - right.x, left.y - right.y, left.z - right.z); 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;
}