Modified Camera.setClipPlane() to avoid garbage

creation using tempvars.  Only a new matrix is 
created now and I think I can get rid of that, too.
experimental
pspeed42 11 years ago
parent e0ee685466
commit ed443bcfa2
  1. 42
      jme3-core/src/main/java/com/jme3/renderer/Camera.java

@ -392,30 +392,36 @@ public class Camera implements Savable, Cloneable {
if (clipPlane.whichSide(location) == side) {
return;
}
Matrix4f p = projectionMatrix.clone();
Matrix4f ivm = viewMatrix.clone();
TempVars vars = TempVars.get();
try {
Matrix4f p = projectionMatrix.clone();
Vector3f point = clipPlane.getNormal().mult(clipPlane.getConstant());
Vector3f pp = ivm.mult(point);
Vector3f pn = ivm.multNormal(clipPlane.getNormal(), null);
Vector4f clipPlaneV = new Vector4f(pn.x * sideFactor, pn.y * sideFactor, pn.z * sideFactor, -(pp.dot(pn)) * sideFactor);
Matrix4f ivm = viewMatrix;
Vector4f v = new Vector4f(0, 0, 0, 0);
Vector3f point = clipPlane.getNormal().mult(clipPlane.getConstant(), vars.vect1);
Vector3f pp = ivm.mult(point, vars.vect2);
Vector3f pn = ivm.multNormal(clipPlane.getNormal(), vars.vect3);
Vector4f clipPlaneV = vars.vect4f1.set(pn.x * sideFactor, pn.y * sideFactor, pn.z * sideFactor, -(pp.dot(pn)) * sideFactor);
v.x = (Math.signum(clipPlaneV.x) + p.m02) / p.m00;
v.y = (Math.signum(clipPlaneV.y) + p.m12) / p.m11;
v.z = -1.0f;
v.w = (1.0f + p.m22) / p.m23;
Vector4f v = vars.vect4f2.set(0, 0, 0, 0);
float dot = clipPlaneV.dot(v);//clipPlaneV.x * v.x + clipPlaneV.y * v.y + clipPlaneV.z * v.z + clipPlaneV.w * v.w;
Vector4f c = clipPlaneV.mult(2.0f / dot);
v.x = (Math.signum(clipPlaneV.x) + p.m02) / p.m00;
v.y = (Math.signum(clipPlaneV.y) + p.m12) / p.m11;
v.z = -1.0f;
v.w = (1.0f + p.m22) / p.m23;
p.m20 = c.x - p.m30;
p.m21 = c.y - p.m31;
p.m22 = c.z - p.m32;
p.m23 = c.w - p.m33;
setProjectionMatrix(p);
float dot = clipPlaneV.dot(v);//clipPlaneV.x * v.x + clipPlaneV.y * v.y + clipPlaneV.z * v.z + clipPlaneV.w * v.w;
Vector4f c = clipPlaneV.multLocal(2.0f / dot);
p.m20 = c.x - p.m30;
p.m21 = c.y - p.m31;
p.m22 = c.z - p.m32;
p.m23 = c.w - p.m33;
setProjectionMatrix(p);
} finally {
vars.release();
}
}
/**

Loading…
Cancel
Save