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]) {
|
if (m->mesh_octnum[i]) {
|
||||||
return oct_distance(m, x, i);
|
return oct_distance(m, x, i);
|
||||||
} else {
|
} else {
|
||||||
mjtNum dir[3] = {-x[0], -x[1], -x[2]};
|
mju_mulMatVec3(a, d->geom_xmat + 9 * i, x);
|
||||||
mjtNum r = mju_normalize3(dir);
|
mju_addTo3(a, d->geom_xpos + 3 * i);
|
||||||
mjtNum dist = mj_rayMesh(m, d, i, x, dir);
|
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) {
|
if (dist > r) {
|
||||||
mju_scl3(dir, dir, -1);
|
mju_scl3(dir, dir, -1);
|
||||||
return -mj_rayMesh(m, d, i, x, dir);
|
return -mj_rayMesh(m, d, i, a, dir);
|
||||||
}
|
}
|
||||||
return dist;
|
return dist;
|
||||||
}
|
}
|
||||||
@@ -391,9 +393,11 @@ static void geomGradient(mjtNum gradient[3], const mjModel* m, const mjData* d,
|
|||||||
if (m->mesh_octnum[i]) {
|
if (m->mesh_octnum[i]) {
|
||||||
oct_gradient(m, gradient, x, i);
|
oct_gradient(m, gradient, x, i);
|
||||||
} else {
|
} else {
|
||||||
mjtNum dir[3] = {-x[0], -x[1], -x[2]};
|
mju_mulMatVec3(a, d->geom_xmat+9*i, x);
|
||||||
mjtNum r = mju_normalize3(dir);
|
mju_addTo3(a, d->geom_xpos+3*i);
|
||||||
mjtNum dist = mj_rayMesh(m, d, i, x, dir);
|
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[0] = dist > r ? 1 : -1;
|
||||||
gradient[1] = dist > r ? 1 : -1;
|
gradient[1] = dist > r ? 1 : -1;
|
||||||
gradient[2] = dist > r ? 1 : -1;
|
gradient[2] = dist > r ? 1 : -1;
|
||||||
|
|||||||
Reference in New Issue
Block a user