triangleSphereIntersect method
Implementation
OctreeData? triangleSphereIntersect(Sphere sphere, Triangle triangle ) {
triangle.getPlane( _plane );
if(!sphere.intersectsPlane( _plane )) return null;
num depth = Math.abs( _plane.distanceToSphere( sphere ) );
num r2 = sphere.radius * sphere.radius - depth * depth;
Vector3 plainPoint = _plane.projectPoint( sphere.center, _v1 );
if ( triangle.containsPoint( sphere.center ) ) {
return OctreeData(normal: _plane.normal.clone(), point: plainPoint.clone(), depth: Math.abs( _plane.distanceToSphere(sphere)));
}
List<List<Vector3>> lines = [
[ triangle.a, triangle.b ],
[ triangle.b, triangle.c ],
[ triangle.c, triangle.a ]
];
for (int i = 0; i < lines.length; i ++ ) {
_line1.set( lines[ i ][ 0 ], lines[ i ][ 1 ] );
_line1.closestPointToPoint( plainPoint, true, _v2 );
num d = _v2.distanceToSquared( sphere.center );
if ( d < r2 ) {
return OctreeData(normal: sphere.center.clone().sub( _v2 ).normalize(), point: _v2.clone(), depth: sphere.radius - Math.sqrt(d));
}
}
return null;
}