public List<Intersect> intersectObject(GeometryObject object){
		Geometry geometry = object.getGeometry();
		ArrayList<Intersect> intersections = Lists.newArrayList();
		for(Face3 face : geometry.getFaces()){
			Boolean isFace4 = face.getClass() == Face4.class;
			Vector3 origin = this.origin.clone(),
			direction = this.direction.clone();
			
			Matrix4 objMatrix = object.getMatrixWorld();
			List<Vertex> verticles = geometry.getVertices();
			
			Vector3 a = objMatrix.multiplyVector3(verticles.get(face.a).position.clone()),
			b = objMatrix.multiplyVector3(verticles.get(face.b).position.clone()),
			c = objMatrix.multiplyVector3(verticles.get(face.c).position.clone()),
			d = isFace4 ? objMatrix.multiplyVector3(verticles.get(((Face4)face).d).position.clone()) : null;
			
			Vector3 normal = object.getMatrixRotationWorld().multiplyVector3(face.normal.clone());
			double dot = direction.dot(normal);
			
			if(object instanceof SidesObject){
				SidesObject sideObject = (SidesObject)object;
				if (sideObject.getDoubleSided() || (sideObject.getFlipSided() ? dot > 0 : dot < 0)){ // Math.abs( dot ) > 0.0001
					double scalar = normal.dot(new Vector3().sub(a, origin)) / dot;
					Vector3 intersectPoint = origin.addSelf(direction.multiplyScalar(scalar));
					if (intersects(intersectPoint, a, b, c, d)){
						Intersect intersect = new Intersect();
						intersect.distance = this.origin.distanceTo(intersectPoint);
						intersect.point = intersectPoint;
						intersect.face = face;
						intersect.object = object;
						
						intersections.add(intersect);
					}
				}
			}
		}
		return intersections;
	}