clipAgainstHull method
void
clipAgainstHull(
- Vec3 posA,
- Quaternion quatA,
- ConvexPolyhedron hullB,
- Vec3 posB,
- Quaternion quatB,
- Vec3 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 Vec3 posA,
final Quaternion quatA,
final ConvexPolyhedron hullB ,
final Vec3 posB,
final Quaternion quatB,
final Vec3 separatingNormal,
final double minDist,
final double maxDist,
final List<ConvexPolyhedronContactPoint> result
) {
final worldNormal = Vec3();
int closestFaceB = -1;
double dmax = -double.infinity;
for (int face = 0; face < hullB.faces.length; face++) {
worldNormal.copy(hullB.faceNormals[face]!);
quatB.vmult(worldNormal, worldNormal);
final double d = worldNormal.dot(separatingNormal);
if (d > dmax) {
dmax = d;
closestFaceB = face;
}
}
List<Vec3> 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 = Vec3();
worldb.copy(b);
quatB.vmult(worldb, worldb);
posB.vadd(worldb, worldb);
worldVertsB1.add(worldb);
}
if (closestFaceB >= 0) {
clipFaceAgainstHull(separatingNormal, posA, quatA, worldVertsB1, minDist, maxDist, result);
}
}