|
@@ -392,30 +392,36 @@ public class Camera implements Savable, Cloneable {
|
|
|
if (clipPlane.whichSide(location) == side) {
|
|
|
return;
|
|
|
}
|
|
|
- Matrix4f p = projectionMatrix.clone();
|
|
|
-
|
|
|
- Matrix4f ivm = viewMatrix.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);
|
|
|
-
|
|
|
- Vector4f v = new Vector4f(0, 0, 0, 0);
|
|
|
-
|
|
|
- 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;
|
|
|
+
|
|
|
+ TempVars vars = TempVars.get();
|
|
|
+ try {
|
|
|
+ Matrix4f p = projectionMatrix.clone();
|
|
|
|
|
|
- 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);
|
|
|
+ Matrix4f ivm = viewMatrix;
|
|
|
|
|
|
- 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);
|
|
|
+ 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);
|
|
|
+
|
|
|
+ Vector4f v = vars.vect4f2.set(0, 0, 0, 0);
|
|
|
+
|
|
|
+ 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;
|
|
|
+
|
|
|
+ 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();
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|