clipAgainstHull method
void
clipAgainstHull(
- Vector3 posA,
- Quaternion quatA,
- ConvexPolyhedron hullB,
- Vector3 posB,
- Quaternion quatB,
- Vector3 separatingNormal,
- double minDist,
- double maxDist,
- List<
ConvexPolyhedronContactPoint> result,
@param minDist Clamp distance @param result The an array of contact point objects, see clipFaceAgainstHull
Implementation
void clipAgainstHull(
final Vector3 posA,
final Quaternion quatA,
final ConvexPolyhedron hullB ,
final Vector3 posB,
final Quaternion quatB,
final Vector3 separatingNormal,
final double minDist,
final double maxDist,
final List<ConvexPolyhedronContactPoint> result
) {
final worldNormal = Vector3.zero();
int closestFaceB = -1;
double dmax = -double.infinity;
for (int face = 0; face < hullB.faces.length; face++) {
worldNormal.setFrom(hullB.faceNormals[face]!);
quatB.vmult(worldNormal, worldNormal);
final double d = worldNormal.dot(separatingNormal);
if (d > dmax) {
dmax = d;
closestFaceB = face;
}
}
List<Vector3> worldVertsB1 = [];
int len = hullB.faces.isEmpty?0:hullB.faces[closestFaceB].length;
for (int i = 0; i < len; i++) {
final b = hullB.vertices[hullB.faces[closestFaceB][i]];
final worldb = Vector3.zero();
worldb.setFrom(b);
quatB.vmult(worldb, worldb);
posB.add2(worldb, worldb);
worldVertsB1.add(worldb);
}
if (closestFaceB >= 0) {
clipFaceAgainstHull(separatingNormal, posA, quatA, worldVertsB1, minDist, maxDist, result);
}
}