Add pan/tilt motions to mjv_moveCamera.
PiperOrigin-RevId: 948308546 Change-Id: I2724b889759e652ed50d03bf97f3c7125cd0eb56
This commit is contained in:
committed by
Copybara-Service
parent
1e85ce176f
commit
52317058ba
@@ -3025,13 +3025,15 @@ typedef enum mjtCatBit_ { // bitflags for mjvGeom category
|
||||
} mjtCatBit;
|
||||
typedef enum mjtMouse_ { // mouse interaction mode
|
||||
mjMOUSE_NONE = 0, // no action
|
||||
mjMOUSE_ROTATE_V, // rotate, vertical plane
|
||||
mjMOUSE_ROTATE_H, // rotate, horizontal plane
|
||||
mjMOUSE_MOVE_V, // move, vertical plane
|
||||
mjMOUSE_MOVE_H, // move, horizontal plane
|
||||
mjMOUSE_ZOOM, // zoom
|
||||
mjMOUSE_MOVE_V_REL, // move, vertical plane, relative to target
|
||||
mjMOUSE_MOVE_H_REL, // move, horizontal plane, relative to target
|
||||
mjMOUSE_ROTATE_V, // rotate (orbit) vertically
|
||||
mjMOUSE_ROTATE_H, // rotate (orbit) horizontally
|
||||
mjMOUSE_MOVE_V, // move along vertical plane
|
||||
mjMOUSE_MOVE_H, // move along horizontal plane
|
||||
mjMOUSE_ZOOM, // zoom (towards/away from lookat point)
|
||||
mjMOUSE_MOVE_V_REL, // move (truck, pedestal), vertical plane rel. to target
|
||||
mjMOUSE_MOVE_H_REL, // move (truck, dolly), horizontal plane rel. to target
|
||||
mjMOUSE_TURN_V, // turn (tilt) vertically
|
||||
mjMOUSE_TURN_H, // turn (pan) horizontally
|
||||
} mjtMouse;
|
||||
typedef enum mjtPertBit_ { // mouse perturbations
|
||||
mjPERT_TRANSLATE = 1, // translation
|
||||
|
||||
@@ -40,13 +40,15 @@ typedef enum mjtCatBit_ { // bitflags for mjvGeom category
|
||||
|
||||
typedef enum mjtMouse_ { // mouse interaction mode
|
||||
mjMOUSE_NONE = 0, // no action
|
||||
mjMOUSE_ROTATE_V, // rotate, vertical plane
|
||||
mjMOUSE_ROTATE_H, // rotate, horizontal plane
|
||||
mjMOUSE_MOVE_V, // move, vertical plane
|
||||
mjMOUSE_MOVE_H, // move, horizontal plane
|
||||
mjMOUSE_ZOOM, // zoom
|
||||
mjMOUSE_MOVE_V_REL, // move, vertical plane, relative to target
|
||||
mjMOUSE_MOVE_H_REL, // move, horizontal plane, relative to target
|
||||
mjMOUSE_ROTATE_V, // rotate (orbit) vertically
|
||||
mjMOUSE_ROTATE_H, // rotate (orbit) horizontally
|
||||
mjMOUSE_MOVE_V, // move along vertical plane
|
||||
mjMOUSE_MOVE_H, // move along horizontal plane
|
||||
mjMOUSE_ZOOM, // zoom (towards/away from lookat point)
|
||||
mjMOUSE_MOVE_V_REL, // move (truck, pedestal), vertical plane rel. to target
|
||||
mjMOUSE_MOVE_H_REL, // move (truck, dolly), horizontal plane rel. to target
|
||||
mjMOUSE_TURN_V, // turn (tilt) vertically
|
||||
mjMOUSE_TURN_H, // turn (pan) horizontally
|
||||
} mjtMouse;
|
||||
|
||||
|
||||
|
||||
@@ -782,6 +782,8 @@ ENUMS: Mapping[str, EnumDecl] = dict([
|
||||
('mjMOUSE_ZOOM', 5),
|
||||
('mjMOUSE_MOVE_V_REL', 6),
|
||||
('mjMOUSE_MOVE_H_REL', 7),
|
||||
('mjMOUSE_TURN_V', 8),
|
||||
('mjMOUSE_TURN_H', 9),
|
||||
]),
|
||||
)),
|
||||
('mjtPertBit',
|
||||
|
||||
@@ -366,6 +366,25 @@ void mjv_moveCamera(const mjModel* m, int action, mjtNum reldx, mjtNum reldy, mj
|
||||
mju_addToScl3(cam->lookat, vec, -scl);
|
||||
break;
|
||||
|
||||
case mjMOUSE_TURN_V:
|
||||
case mjMOUSE_TURN_H:
|
||||
if (cam->type == mjCAMERA_TRACKING) {
|
||||
return;
|
||||
}
|
||||
|
||||
mjv_cameraFrame(headpos, forward, NULL, NULL, NULL, cam);
|
||||
if (action == mjMOUSE_TURN_H) {
|
||||
cam->azimuth -= reldx * 180.0;
|
||||
}
|
||||
if (action == mjMOUSE_TURN_V) {
|
||||
cam->elevation -= reldy * 180.0;
|
||||
}
|
||||
mjv_cameraFrame(NULL, forward, NULL, NULL, NULL, cam);
|
||||
|
||||
// move lookat point so that camera faces new direction
|
||||
mju_addScl3(cam->lookat, headpos, forward, cam->distance);
|
||||
break;
|
||||
|
||||
case mjMOUSE_ZOOM:
|
||||
cam->distance -= mju_log(1 + cam->distance/m->stat.extent/3) * reldy * 9 * m->stat.extent;
|
||||
break;
|
||||
|
||||
@@ -616,6 +616,8 @@ public enum mjtMouse : int{
|
||||
mjMOUSE_ZOOM = 5,
|
||||
mjMOUSE_MOVE_V_REL = 6,
|
||||
mjMOUSE_MOVE_H_REL = 7,
|
||||
mjMOUSE_TURN_V = 8,
|
||||
mjMOUSE_TURN_H = 9,
|
||||
}
|
||||
public enum mjtPertBit : int{
|
||||
mjPERT_TRANSLATE = 1,
|
||||
|
||||
@@ -4198,7 +4198,9 @@ EMSCRIPTEN_BINDINGS(mujoco_bindings) {
|
||||
.value("mjMOUSE_MOVE_H", mjMOUSE_MOVE_H)
|
||||
.value("mjMOUSE_ZOOM", mjMOUSE_ZOOM)
|
||||
.value("mjMOUSE_MOVE_V_REL", mjMOUSE_MOVE_V_REL)
|
||||
.value("mjMOUSE_MOVE_H_REL", mjMOUSE_MOVE_H_REL);
|
||||
.value("mjMOUSE_MOVE_H_REL", mjMOUSE_MOVE_H_REL)
|
||||
.value("mjMOUSE_TURN_V", mjMOUSE_TURN_V)
|
||||
.value("mjMOUSE_TURN_H", mjMOUSE_TURN_H);
|
||||
enum_<mjtObj>("mjtObj")
|
||||
.value("mjOBJ_UNKNOWN", mjOBJ_UNKNOWN)
|
||||
.value("mjOBJ_BODY", mjOBJ_BODY)
|
||||
|
||||
Reference in New Issue
Block a user