|
@@ -4,7 +4,8 @@ class ObjectCollider implements Collider implements hxd.impl.Serializable {
|
|
|
|
|
|
@:s public var obj : h3d.scene.Object;
|
|
|
@:s public var collider : Collider;
|
|
|
- var tmpRay = new Ray();
|
|
|
+ static var TMP_RAY = new Ray();
|
|
|
+ static var TMP_MAT = new Matrix();
|
|
|
|
|
|
public function new(obj, collider) {
|
|
|
this.obj = obj;
|
|
@@ -12,16 +13,20 @@ class ObjectCollider implements Collider implements hxd.impl.Serializable {
|
|
|
}
|
|
|
|
|
|
public function rayIntersection( r : Ray, bestMatch : Bool ) : Float {
|
|
|
+ var tmpRay = TMP_RAY;
|
|
|
+ TMP_RAY = null;
|
|
|
tmpRay.load(r);
|
|
|
r.transform(obj.getInvPos());
|
|
|
var hit = collider.rayIntersection(r, bestMatch);
|
|
|
if( hit < 0 ) {
|
|
|
r.load(tmpRay);
|
|
|
+ TMP_RAY = tmpRay;
|
|
|
return hit;
|
|
|
}
|
|
|
var pt = r.getPoint(hit);
|
|
|
pt.transform(@:privateAccess obj.absPos);
|
|
|
r.load(tmpRay);
|
|
|
+ TMP_RAY = tmpRay;
|
|
|
return hxd.Math.distance(pt.x - r.px, pt.y - r.py, pt.z - r.pz);
|
|
|
}
|
|
|
|
|
@@ -34,9 +39,11 @@ class ObjectCollider implements Collider implements hxd.impl.Serializable {
|
|
|
}
|
|
|
|
|
|
public function inFrustum( f : Frustum, ?m : h3d.Matrix ) {
|
|
|
- if( m != null )
|
|
|
- throw "Not implemented";
|
|
|
- return collider.inFrustum(f, obj.getAbsPos());
|
|
|
+ if( m == null )
|
|
|
+ return collider.inFrustum(f, obj.getAbsPos());
|
|
|
+ var mat = TMP_MAT;
|
|
|
+ mat.multiply3x4inline(m, obj.getAbsPos());
|
|
|
+ return collider.inFrustum(f, mat);
|
|
|
}
|
|
|
|
|
|
public function inSphere( s : Sphere ) {
|