Specialized box and capsule collision primitives for stable 2D flex interactions.
PiperOrigin-RevId: 864500749 Change-Id: I52aed6e29569477a8a0b6b5eb55ad483f1077c0e
This commit is contained in:
committed by
Copybara-Service
parent
8344dba11e
commit
a54c9f1d78
@@ -1477,13 +1477,15 @@ void mjc_fixNormal(const mjModel* m, const mjData* d, mjContact* con, int g1, in
|
||||
int gid[2] = {g1, g2};
|
||||
mjtGeom type[2];
|
||||
for (int i=0; i < 2; i++) {
|
||||
type[i] = m->geom_type[gid[i]];
|
||||
if (gid[i] < 0) {
|
||||
type[i] = mjGEOM_NONE;
|
||||
} else {
|
||||
type[i] = m->geom_type[gid[i]];
|
||||
}
|
||||
|
||||
// set to mjGEOM_NONE if type cannot be processed
|
||||
if (type[i] != mjGEOM_SPHERE &&
|
||||
type[i] != mjGEOM_CAPSULE &&
|
||||
type[i] != mjGEOM_ELLIPSOID &&
|
||||
type[i] != mjGEOM_CYLINDER) {
|
||||
if (type[i] != mjGEOM_SPHERE && type[i] != mjGEOM_CAPSULE &&
|
||||
type[i] != mjGEOM_ELLIPSOID && type[i] != mjGEOM_CYLINDER) {
|
||||
type[i] = mjGEOM_NONE;
|
||||
}
|
||||
}
|
||||
@@ -1582,6 +1584,7 @@ void mjc_fixNormal(const mjModel* m, const mjData* d, mjContact* con, int g1, in
|
||||
nrm[2] = 0;
|
||||
processed[i] = 1;
|
||||
break;
|
||||
|
||||
default:
|
||||
// do nothing: only sphere, capsule, ellipsoid and cylinder are processed
|
||||
break;
|
||||
@@ -1630,7 +1633,23 @@ int mjc_ConvexElem(const mjModel* m, const mjData* d, mjContact* con,
|
||||
mjc_setCCDObjFlex(&obj2, f2, e2, -1);
|
||||
|
||||
// find contacts
|
||||
return mjc_CCDIteration(m, d, &obj1, &obj2, con, 1, margin);
|
||||
int ncon = mjc_CCDIteration(m, d, &obj1, &obj2, con, 1, margin);
|
||||
|
||||
// fix normals for 2D flex
|
||||
if (ncon && !mjDISABLED(mjDSBL_NATIVECCD)) {
|
||||
// check if either object is a 2D flex
|
||||
int isflex2d = 0;
|
||||
if (f1 >= 0 && m->flex_dim[f1] == 2) isflex2d = 1;
|
||||
if (f2 >= 0 && m->flex_dim[f2] == 2) isflex2d = 1;
|
||||
|
||||
if (isflex2d) {
|
||||
for (int i = 0; i < ncon; i++) {
|
||||
mjc_fixNormal(m, d, con + i, g1, -1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return ncon;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user