Matrix4f: simpler fromFrame() without matrix multiplication

This commit is contained in:
Kirill Vainer 2015-08-21 22:29:26 -04:00
parent 57d560244e
commit 5a863c6075

View File

@ -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) { public void fromFrame(Vector3f location, Vector3f direction, Vector3f up, Vector3f left) {
loadIdentity();
TempVars vars = TempVars.get(); TempVars vars = TempVars.get();
try {
Vector3f fwdVector = vars.vect1.set(direction);
Vector3f leftVector = vars.vect2.set(fwdVector).crossLocal(up);
Vector3f upVector = vars.vect3.set(leftVector).crossLocal(fwdVector);
Vector3f f = vars.vect1.set(direction); m00 = leftVector.x;
Vector3f s = vars.vect2.set(f).crossLocal(up); m01 = leftVector.y;
Vector3f u = vars.vect3.set(s).crossLocal(f); m02 = leftVector.z;
// s.normalizeLocal(); m03 = -leftVector.dot(location);
// u.normalizeLocal();
m00 = s.x; m10 = upVector.x;
m01 = s.y; m11 = upVector.y;
m02 = s.z; m12 = upVector.z;
m13 = -upVector.dot(location);
m10 = u.x; m20 = -fwdVector.x;
m11 = u.y; m21 = -fwdVector.y;
m12 = u.z; m22 = -fwdVector.z;
m23 = fwdVector.dot(location);
m20 = -f.x; m30 = 0f;
m21 = -f.y; m31 = 0f;
m22 = -f.z; m32 = 0f;
m33 = 1f;
// m00 = -left.x; } finally {
// m10 = -left.y; vars.release();
// 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);
} }
/** /**