Transform inputs to global before calling rayMesh in SDF collisions.
PiperOrigin-RevId: 802523399 Change-Id: I889b020e4e721fbf471992f5c87446df601ba766
This commit is contained in:
committed by
Copybara-Service
parent
7a93e22514
commit
767996ab17
@@ -274,12 +274,14 @@ static mjtNum geomDistance(const mjModel* m, const mjData* d, const mjpPlugin* p
|
||||
if (m->mesh_octnum[i]) {
|
||||
return oct_distance(m, x, i);
|
||||
} else {
|
||||
mjtNum dir[3] = {-x[0], -x[1], -x[2]};
|
||||
mjtNum r = mju_normalize3(dir);
|
||||
mjtNum dist = mj_rayMesh(m, d, i, x, dir);
|
||||
mju_mulMatVec3(a, d->geom_xmat + 9 * i, x);
|
||||
mju_addTo3(a, d->geom_xpos + 3 * i);
|
||||
mjtNum dir[3] = {-a[0], -a[1], -a[2]};
|
||||
mjtNum r = mju_norm3(dir);
|
||||
mjtNum dist = mj_rayMesh(m, d, i, a, dir);
|
||||
if (dist > r) {
|
||||
mju_scl3(dir, dir, -1);
|
||||
return -mj_rayMesh(m, d, i, x, dir);
|
||||
return -mj_rayMesh(m, d, i, a, dir);
|
||||
}
|
||||
return dist;
|
||||
}
|
||||
@@ -391,9 +393,11 @@ static void geomGradient(mjtNum gradient[3], const mjModel* m, const mjData* d,
|
||||
if (m->mesh_octnum[i]) {
|
||||
oct_gradient(m, gradient, x, i);
|
||||
} else {
|
||||
mjtNum dir[3] = {-x[0], -x[1], -x[2]};
|
||||
mjtNum r = mju_normalize3(dir);
|
||||
mjtNum dist = mj_rayMesh(m, d, i, x, dir);
|
||||
mju_mulMatVec3(a, d->geom_xmat+9*i, x);
|
||||
mju_addTo3(a, d->geom_xpos+3*i);
|
||||
mjtNum dir[3] = {-a[0], -a[1], -a[2]};
|
||||
mjtNum r = mju_norm3(dir);
|
||||
mjtNum dist = mj_rayMesh(m, d, i, a, dir);
|
||||
gradient[0] = dist > r ? 1 : -1;
|
||||
gradient[1] = dist > r ? 1 : -1;
|
||||
gradient[2] = dist > r ? 1 : -1;
|
||||
|
||||
Reference in New Issue
Block a user