From 5a863c60758b84b07da590cb95d484eb1f72431c Mon Sep 17 00:00:00 2001 From: Kirill Vainer Date: Fri, 21 Aug 2015 22:29:26 -0400 Subject: [PATCH] Matrix4f: simpler fromFrame() without matrix multiplication --- .../src/main/java/com/jme3/math/Matrix4f.java | 73 +++++++------------ 1 file changed, 27 insertions(+), 46 deletions(-) diff --git a/jme3-core/src/main/java/com/jme3/math/Matrix4f.java b/jme3-core/src/main/java/com/jme3/math/Matrix4f.java index c8dd3ef4a..159e39932 100644 --- a/jme3-core/src/main/java/com/jme3/math/Matrix4f.java +++ b/jme3-core/src/main/java/com/jme3/math/Matrix4f.java @@ -154,53 +154,34 @@ public final class Matrix4f implements Savable, Cloneable, java.io.Serializable } public void fromFrame(Vector3f location, Vector3f direction, Vector3f up, Vector3f left) { - loadIdentity(); - TempVars vars = TempVars.get(); - - Vector3f f = vars.vect1.set(direction); - Vector3f s = vars.vect2.set(f).crossLocal(up); - Vector3f u = vars.vect3.set(s).crossLocal(f); -// s.normalizeLocal(); -// u.normalizeLocal(); - - m00 = s.x; - m01 = s.y; - m02 = s.z; - - m10 = u.x; - m11 = u.y; - m12 = u.z; - - m20 = -f.x; - m21 = -f.y; - m22 = -f.z; - -// m00 = -left.x; -// m10 = -left.y; -// m20 = -left.z; -// -// m01 = up.x; -// m11 = up.y; -// m21 = up.z; -// -// m02 = -direction.x; -// m12 = -direction.y; -// m22 = -direction.z; -// - - Matrix4f transMatrix = vars.tempMat4; - transMatrix.loadIdentity(); - transMatrix.m03 = -location.x; - transMatrix.m13 = -location.y; - transMatrix.m23 = -location.z; - this.multLocal(transMatrix); - - vars.release(); - -// transMatrix.multLocal(this); - -// set(transMatrix); + try { + Vector3f fwdVector = vars.vect1.set(direction); + Vector3f leftVector = vars.vect2.set(fwdVector).crossLocal(up); + Vector3f upVector = vars.vect3.set(leftVector).crossLocal(fwdVector); + + m00 = leftVector.x; + m01 = leftVector.y; + m02 = leftVector.z; + m03 = -leftVector.dot(location); + + m10 = upVector.x; + m11 = upVector.y; + m12 = upVector.z; + m13 = -upVector.dot(location); + + m20 = -fwdVector.x; + m21 = -fwdVector.y; + m22 = -fwdVector.z; + m23 = fwdVector.dot(location); + + m30 = 0f; + m31 = 0f; + m32 = 0f; + m33 = 1f; + } finally { + vars.release(); + } } /**