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.
This commit is contained in:
		
							parent
							
								
									e0ee685466
								
							
						
					
					
						commit
						ed443bcfa2
					
				| @ -392,16 +392,19 @@ public class Camera implements Savable, Cloneable { | ||||
|         if (clipPlane.whichSide(location) == side) { | ||||
|             return; | ||||
|         } | ||||
|          | ||||
|         TempVars vars = TempVars.get(); | ||||
|         try {         | ||||
|             Matrix4f p = projectionMatrix.clone(); | ||||
| 
 | ||||
|         Matrix4f ivm = viewMatrix.clone(); | ||||
|             Matrix4f ivm = viewMatrix; | ||||
| 
 | ||||
|         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); | ||||
|             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 = new Vector4f(0, 0, 0, 0); | ||||
|             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; | ||||
| @ -409,13 +412,16 @@ public class Camera implements Savable, Cloneable { | ||||
|             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.mult(2.0f / dot); | ||||
|             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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user