Make mjv_cameraFrame and mjv_cameraFrustum public.

PiperOrigin-RevId: 832187804
Change-Id: I74d05d7fe03bc81bd05a823c7c9791bca12e3079
This commit is contained in:
Haroon Qureshi
2025-11-14 00:02:05 -08:00
committed by Copybara-Service
parent 86ac3a5e28
commit 6c15c711ee
8 changed files with 161 additions and 6 deletions
+22
View File
@@ -2340,6 +2340,28 @@ Update camera.
Update skins.
.. _mjv_cameraFrame:
`mjv_cameraFrame <#mjv_cameraFrame>`__
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. mujoco-include:: mjv_cameraFrame
Compute camera position and forward, up, and right vectors.
*Nullable:* ``headpos``, ``forward``, ``up``, ``right``
.. _mjv_cameraFrustum:
`mjv_cameraFrustum <#mjv_cameraFrustum>`__
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. mujoco-include:: mjv_cameraFrustum
Compute camera frustum: vertical, horizontal, and clip planes.
*Nullable:* ``zver``, ``zhor``, ``zclip``
.. _OpenGLrendering:
OpenGL rendering
+4
View File
@@ -3290,6 +3290,10 @@ void mjv_addGeoms(const mjModel* m, mjData* d, const mjvOption* opt,
void mjv_makeLights(const mjModel* m, const mjData* d, mjvScene* scn);
void mjv_updateCamera(const mjModel* m, const mjData* d, mjvCamera* cam, mjvScene* scn);
void mjv_updateSkin(const mjModel* m, const mjData* d, mjvScene* scn);
void mjv_cameraFrame(mjtNum headpos[3], mjtNum forward[3], mjtNum up[3], mjtNum right[3],
const mjData* d, const mjvCamera* cam);
void mjv_cameraFrustum(float zver[2], float zhor[2], float zclip[2], const mjModel* m,
const mjvCamera* cam);
void mjr_defaultContext(mjrContext* con);
void mjr_makeContext(const mjModel* m, mjrContext* con, int fontscale);
void mjr_changeFont(int fontscale, mjrContext* con);
+10
View File
@@ -772,6 +772,16 @@ MJAPI void mjv_updateCamera(const mjModel* m, const mjData* d, mjvCamera* cam, m
// Update skins.
MJAPI void mjv_updateSkin(const mjModel* m, const mjData* d, mjvScene* scn);
// Compute camera position and forward, up, and right vectors.
// Nullable: headpos, forward, up, right
MJAPI void mjv_cameraFrame(mjtNum headpos[3], mjtNum forward[3], mjtNum up[3], mjtNum right[3],
const mjData* d, const mjvCamera* cam);
// Compute camera frustum: vertical, horizontal, and clip planes.
// Nullable: zver, zhor, zclip
MJAPI void mjv_cameraFrustum(float zver[2], float zhor[2], float zclip[2], const mjModel* m,
const mjvCamera* cam);
//---------------------------------- OpenGL rendering ----------------------------------------------
+2
View File
@@ -740,6 +740,8 @@ PYBIND11_MODULE(_functions, pymodule) {
Def<traits::mjv_makeLights>(pymodule);
Def<traits::mjv_updateCamera>(pymodule);
Def<traits::mjv_updateSkin>(pymodule);
Def<traits::mjv_cameraFrame>(pymodule);
Def<traits::mjv_cameraFrustum>(pymodule);
// UI framework
// Skipped: entire section (can add this if there's demand)
+96
View File
@@ -4929,6 +4929,102 @@ FUNCTIONS: Mapping[str, FunctionDecl] = dict([
),
doc='Update skins.',
)),
('mjv_cameraFrame',
FunctionDecl(
name='mjv_cameraFrame',
return_type=ValueType(name='void'),
parameters=(
FunctionParameterDecl(
name='headpos',
type=ArrayType(
inner_type=ValueType(name='mjtNum'),
extents=(3,),
),
nullable=True,
),
FunctionParameterDecl(
name='forward',
type=ArrayType(
inner_type=ValueType(name='mjtNum'),
extents=(3,),
),
nullable=True,
),
FunctionParameterDecl(
name='up',
type=ArrayType(
inner_type=ValueType(name='mjtNum'),
extents=(3,),
),
nullable=True,
),
FunctionParameterDecl(
name='right',
type=ArrayType(
inner_type=ValueType(name='mjtNum'),
extents=(3,),
),
nullable=True,
),
FunctionParameterDecl(
name='d',
type=PointerType(
inner_type=ValueType(name='mjData', is_const=True),
),
),
FunctionParameterDecl(
name='cam',
type=PointerType(
inner_type=ValueType(name='mjvCamera', is_const=True),
),
),
),
doc='Compute camera position and forward, up, and right vectors.',
)),
('mjv_cameraFrustum',
FunctionDecl(
name='mjv_cameraFrustum',
return_type=ValueType(name='void'),
parameters=(
FunctionParameterDecl(
name='zver',
type=ArrayType(
inner_type=ValueType(name='float'),
extents=(2,),
),
nullable=True,
),
FunctionParameterDecl(
name='zhor',
type=ArrayType(
inner_type=ValueType(name='float'),
extents=(2,),
),
nullable=True,
),
FunctionParameterDecl(
name='zclip',
type=ArrayType(
inner_type=ValueType(name='float'),
extents=(2,),
),
nullable=True,
),
FunctionParameterDecl(
name='m',
type=PointerType(
inner_type=ValueType(name='mjModel', is_const=True),
),
),
FunctionParameterDecl(
name='cam',
type=PointerType(
inner_type=ValueType(name='mjvCamera', is_const=True),
),
),
),
doc='Compute camera frustum: vertical, horizontal, and clip planes.',
)),
('mjr_defaultContext',
FunctionDecl(
name='mjr_defaultContext',
+4 -6
View File
@@ -58,14 +58,12 @@ MJAPI void mjv_updateActiveSkin(const mjModel* m, const mjData* d, mjvScene* scn
const mjvOption* opt);
// computes the camera position, forward, up, and right vectors
// Nullable: headpos, forward, up, right
void mjv_cameraFrame(mjtNum headpos[3], mjtNum forward[3], mjtNum up[3], mjtNum right[3],
const mjData* d, const mjvCamera* cam);
MJAPI void mjv_cameraFrame(mjtNum headpos[3], mjtNum forward[3], mjtNum up[3], mjtNum right[3],
const mjData* d, const mjvCamera* cam);
// computes the camera frustums, i.e. vertical, horizontal, and clip planes
// Nullable: zver, zhor, zclip
void mjv_cameraFrustum(float zver[2], float zhor[2], float zclip[2], const mjModel* m,
const mjvCamera* cam);
MJAPI void mjv_cameraFrustum(float zver[2], float zhor[2], float zclip[2], const mjModel* m,
const mjvCamera* cam);
int mjv_catenary(const mjtNum x0[3], const mjtNum x1[3], const mjtNum gravity[3], mjtNum length,
mjtNum* catenary, int ncatenary);
+6
View File
@@ -6885,6 +6885,12 @@ public static unsafe extern void mjv_updateCamera(mjModel_* m, mjData_* d, mjvCa
[DllImport("mujoco", CallingConvention = CallingConvention.Cdecl)]
public static unsafe extern void mjv_updateSkin(mjModel_* m, mjData_* d, mjvScene_* scn);
[DllImport("mujoco", CallingConvention = CallingConvention.Cdecl)]
public static unsafe extern void mjv_cameraFrame(double* headpos, double* forward, double* up, double* right, mjData_* d, mjvCamera_* cam);
[DllImport("mujoco", CallingConvention = CallingConvention.Cdecl)]
public static unsafe extern void mjv_cameraFrustum(float* zver, float* zhor, float* zclip, mjModel_* m, mjvCamera_* cam);
[DllImport("mujoco", CallingConvention = CallingConvention.Cdecl)]
public static unsafe extern void mjr_defaultContext(mjrContext_* con);
+17
View File
@@ -10580,6 +10580,21 @@ void mjv_updateSkin_wrapper(const MjModel& m, const MjData& d, MjvScene& scn) {
mjv_updateSkin(m.get(), d.get(), scn.get());
}
void mjv_cameraFrame_wrapper(const val& headpos, const val& forward, const val& up, const val& right, const MjData& d, const MjvCamera& cam) {
UNPACK_VALUE(mjtNum, headpos);
UNPACK_VALUE(mjtNum, forward);
UNPACK_VALUE(mjtNum, up);
UNPACK_VALUE(mjtNum, right);
mjv_cameraFrame(headpos_.data(), forward_.data(), up_.data(), right_.data(), d.get(), cam.get());
}
void mjv_cameraFrustum_wrapper(const val& zver, const val& zhor, const val& zclip, const MjModel& m, const MjvCamera& cam) {
UNPACK_VALUE(float, zver);
UNPACK_VALUE(float, zhor);
UNPACK_VALUE(float, zclip);
mjv_cameraFrustum(zver_.data(), zhor_.data(), zclip_.data(), m.get(), cam.get());
}
void mju_writeLog_wrapper(const String& type, const String& msg) {
CHECK_VAL(type);
CHECK_VAL(msg);
@@ -12582,6 +12597,8 @@ EMSCRIPTEN_BINDINGS(mujoco_functions) {
function("mjv_makeLights", &mjv_makeLights_wrapper);
function("mjv_updateCamera", &mjv_updateCamera_wrapper);
function("mjv_updateSkin", &mjv_updateSkin_wrapper);
function("mjv_cameraFrame", &mjv_cameraFrame_wrapper);
function("mjv_cameraFrustum", &mjv_cameraFrustum_wrapper);
function("mju_writeLog", &mju_writeLog_wrapper);
function("mjs_getError", &mjs_getError_wrapper);
function("mjs_isWarning", &mjs_isWarning_wrapper);