@@ -379,7 +379,7 @@ static void addContactGeom(const mjModel* m, mjData* d, const mjtByte* flags,
379
379
mju_add3 (to , from , vec );
380
380
mjv_connector (thisgeom ,
381
381
bf [0 ] > 0 && bf [1 ] > 0 && !split ? mjGEOM_ARROW2 : mjGEOM_ARROW ,
382
- m -> vis .scale .forcewidth * scl ,from , to );
382
+ m -> vis .scale .forcewidth * scl , from , to );
383
383
f2f (thisgeom -> rgba , j == 2 ? m -> vis .rgba .contactfriction : m -> vis .rgba .contactforce , 4 );
384
384
if (vopt -> label == mjLABEL_CONTACTFORCE && j == (split ? 1 : 0 )) {
385
385
mjSNPRINTF (thisgeom -> label , "%-.3g" , mju_norm3 (frc ));
@@ -852,7 +852,6 @@ void mjv_addGeoms(const mjModel* m, mjData* d, const mjvOption* vopt,
852
852
if (vopt -> flags [mjVIS_BODYBVH ]) {
853
853
for (int i = 0 ; i < m -> nbvhstatic ; i ++ ) {
854
854
int isleaf = m -> bvh_child [2 * i ] == -1 && m -> bvh_child [2 * i + 1 ] == -1 ;
855
- if (scn -> ngeom >= scn -> maxgeom ) break ;
856
855
if (m -> bvh_depth [i ] != vopt -> bvh_depth ) {
857
856
if (!isleaf || m -> bvh_depth [i ] > vopt -> bvh_depth ) {
858
857
continue ;
@@ -876,10 +875,10 @@ void mjv_addGeoms(const mjModel* m, mjData* d, const mjvOption* vopt,
876
875
// get xpos, xmat, size
877
876
const mjtNum * xpos = isleaf ? d -> geom_xpos + 3 * geomid : d -> xipos + 3 * bodyid ;
878
877
const mjtNum * xmat = isleaf ? d -> geom_xmat + 9 * geomid : d -> ximat + 9 * bodyid ;
879
- const mjtNum * size = isleaf ? m -> geom_aabb + 6 * geomid + 3 : m -> bvh_aabb + 6 * i + 3 ;
878
+ const mjtNum * size = isleaf ? m -> geom_aabb + 6 * geomid + 3 : m -> bvh_aabb + 6 * i + 3 ;
880
879
881
880
// offset xpos with aabb center (not always at frame origin)
882
- const mjtNum * center = isleaf ? m -> geom_aabb + 6 * geomid : m -> bvh_aabb + 6 * i ;
881
+ const mjtNum * center = isleaf ? m -> geom_aabb + 6 * geomid : m -> bvh_aabb + 6 * i ;
883
882
mjtNum pos [3 ];
884
883
mju_mulMatVec3 (pos , xmat , center );
885
884
mju_addTo3 (pos , xpos );
@@ -909,15 +908,14 @@ void mjv_addGeoms(const mjModel* m, mjData* d, const mjvOption* vopt,
909
908
if (m -> flex_bvhnum [f ] && vopt -> flexgroup [mjMAX (0 , mjMIN (mjNGROUP - 1 , m -> flex_group [f ]))]) {
910
909
for (int i = m -> flex_bvhadr [f ]; i < m -> flex_bvhadr [f ]+ m -> flex_bvhnum [f ]; i ++ ) {
911
910
int isleaf = m -> bvh_child [2 * i ] == -1 && m -> bvh_child [2 * i + 1 ] == -1 ;
912
- if (scn -> ngeom >= scn -> maxgeom ) break ;
913
911
if (m -> bvh_depth [i ] != vopt -> bvh_depth ) {
914
912
if (!isleaf || m -> bvh_depth [i ] > vopt -> bvh_depth ) {
915
913
continue ;
916
914
}
917
915
}
918
916
919
917
// get box data
920
- mjtNum * aabb = d -> bvh_aabb_dyn + 6 * (i - m -> nbvhstatic );
918
+ mjtNum * aabb = d -> bvh_aabb_dyn + 6 * (i - m -> nbvhstatic );
921
919
922
920
// set box color
923
921
const float * rgba = m -> vis .rgba .bv ;
@@ -956,7 +954,6 @@ void mjv_addGeoms(const mjModel* m, mjData* d, const mjvOption* vopt,
956
954
for (int i = 0 ; i < 2 ; i ++ ) {
957
955
for (int j = 0 ; j < 2 ; j ++ ) {
958
956
for (int k = 0 ; k < 2 ; k ++ ) {
959
- if (scn -> ngeom >= scn -> maxgeom ) break ;
960
957
if (i == 0 ) {
961
958
if (geomsExhausted (scn )) {
962
959
return ;
@@ -1004,7 +1001,6 @@ void mjv_addGeoms(const mjModel* m, mjData* d, const mjvOption* vopt,
1004
1001
for (int b = 0 ; b < m -> mesh_bvhnum [meshid ]; b ++ ) {
1005
1002
int i = b + m -> mesh_bvhadr [meshid ];
1006
1003
int isleaf = m -> bvh_child [2 * i ] == -1 && m -> bvh_child [2 * i + 1 ] == -1 ;
1007
- if (scn -> ngeom >= scn -> maxgeom ) break ;
1008
1004
if (m -> bvh_depth [i ] != vopt -> bvh_depth ) {
1009
1005
if (!isleaf || m -> bvh_depth [i ] > vopt -> bvh_depth ) {
1010
1006
continue ;
@@ -1025,10 +1021,10 @@ void mjv_addGeoms(const mjModel* m, mjData* d, const mjvOption* vopt,
1025
1021
// get xpos, xmat, size
1026
1022
const mjtNum * xpos = d -> geom_xpos + 3 * geomid ;
1027
1023
const mjtNum * xmat = d -> geom_xmat + 9 * geomid ;
1028
- const mjtNum * size = m -> bvh_aabb + 6 * i + 3 ;
1024
+ const mjtNum * size = m -> bvh_aabb + 6 * i + 3 ;
1029
1025
1030
1026
// offset xpos with aabb center (not always at geom origin)
1031
- const mjtNum * center = m -> bvh_aabb + 6 * i ;
1027
+ const mjtNum * center = m -> bvh_aabb + 6 * i ;
1032
1028
mjtNum pos [3 ];
1033
1029
mju_mulMatVec3 (pos , xmat , center );
1034
1030
mju_addTo3 (pos , xpos );
@@ -1072,10 +1068,10 @@ void mjv_addGeoms(const mjModel* m, mjData* d, const mjvOption* vopt,
1072
1068
// get xpos, xmat, size
1073
1069
const mjtNum * xpos = d -> geom_xpos + 3 * geomid ;
1074
1070
const mjtNum * xmat = d -> geom_xmat + 9 * geomid ;
1075
- const mjtNum * size = m -> oct_aabb + 6 * i + 3 ;
1071
+ const mjtNum * size = m -> oct_aabb + 6 * i + 3 ;
1076
1072
1077
1073
// offset xpos with aabb center (not always at geom origin)
1078
- const mjtNum * center = m -> oct_aabb + 6 * i ;
1074
+ const mjtNum * center = m -> oct_aabb + 6 * i ;
1079
1075
mjtNum pos [3 ];
1080
1076
mju_mulMatVec3 (pos , xmat , center );
1081
1077
mju_addTo3 (pos , xpos );
@@ -1120,43 +1116,43 @@ void mjv_addGeoms(const mjModel* m, mjData* d, const mjvOption* vopt,
1120
1116
for (int i = 0 ; i < m -> mesh_facenum [mesh_id ]; i ++ ) {
1121
1117
if (geomsExhausted (scn )) {
1122
1118
return ;
1123
- } else {
1124
- // triangle in global frame
1125
- mjtNum pos [3 ][3 ];
1126
- for (int j = 0 ; j < 3 ; j ++ ) {
1127
- mjtNum v [3 ] = {mesh_vert [3 * face [3 * i + j ] + 0 ],
1128
- mesh_vert [3 * face [3 * i + j ] + 1 ],
1129
- mesh_vert [3 * face [3 * i + j ] + 2 ]};
1130
- mju_mulMatVec3 (pos [j ], geom_mat , v );
1131
- mju_addTo3 (pos [j ], geom_pos );
1132
- }
1119
+ }
1133
1120
1134
- // color
1135
- float rgba [4 ] = {0 , 0 , 0 , 1.0 };
1136
- mjtNum nval [3 ] = {0 , 0 , 0 };
1137
- for (int r = 0 ; r < mjMIN (nchannel , 3 ); r ++ ) {
1138
- for (int j = 0 ; j < 3 ; j ++ ) {
1139
- mjtNum val = sensordata [r * m -> mesh_vertnum [mesh_id ] + face [3 * i + j ]];
1140
- rgba [r ] += mju_abs (val ) / maxval ;
1141
- if (val ) {
1142
- nval [r ] += 1 ;
1143
- }
1144
- }
1145
- if (nval [r ]) {
1146
- rgba [r ] /= nval [r ];
1121
+ // triangle in global frame
1122
+ mjtNum pos [3 ][3 ];
1123
+ for (int j = 0 ; j < 3 ; j ++ ) {
1124
+ mjtNum v [3 ] = {mesh_vert [3 * face [3 * i + j ] + 0 ],
1125
+ mesh_vert [3 * face [3 * i + j ] + 1 ],
1126
+ mesh_vert [3 * face [3 * i + j ] + 2 ]};
1127
+ mju_mulMatVec3 (pos [j ], geom_mat , v );
1128
+ mju_addTo3 (pos [j ], geom_pos );
1129
+ }
1130
+
1131
+ // color
1132
+ float rgba [4 ] = {0 , 0 , 0 , 1.0 };
1133
+ mjtNum nval [3 ] = {0 , 0 , 0 };
1134
+ for (int r = 0 ; r < mjMIN (nchannel , 3 ); r ++ ) {
1135
+ for (int j = 0 ; j < 3 ; j ++ ) {
1136
+ mjtNum val = sensordata [r * m -> mesh_vertnum [mesh_id ] + face [3 * i + j ]];
1137
+ rgba [r ] += mju_abs (val ) / maxval ;
1138
+ if (val ) {
1139
+ nval [r ] += 1 ;
1147
1140
}
1148
1141
}
1149
-
1150
- if (rgba [0 ]== 0 && rgba [1 ]== 0 && rgba [2 ]== 0 ) {
1151
- rgba [3 ] = .1 ;
1142
+ if (nval [r ]) {
1143
+ rgba [r ] /= nval [r ];
1152
1144
}
1145
+ }
1153
1146
1154
- // draw triangles, one per side
1155
- thisgeom = acquireGeom (scn , i , category , objtype );
1156
- makeTriangle (thisgeom , pos [0 ], pos [1 ], pos [2 ], rgba );
1157
- thisgeom -> objid = id ;
1158
- releaseGeom (& thisgeom , scn );
1147
+ if (rgba [0 ]== 0 && rgba [1 ]== 0 && rgba [2 ]== 0 ) {
1148
+ rgba [3 ] = .1 ;
1159
1149
}
1150
+
1151
+ // draw triangles, one per side
1152
+ thisgeom = acquireGeom (scn , i , category , objtype );
1153
+ makeTriangle (thisgeom , pos [0 ], pos [1 ], pos [2 ], rgba );
1154
+ thisgeom -> objid = id ;
1155
+ releaseGeom (& thisgeom , scn );
1160
1156
}
1161
1157
}
1162
1158
}
@@ -1260,7 +1256,7 @@ void mjv_addGeoms(const mjModel* m, mjData* d, const mjvOption* vopt,
1260
1256
thisgeom = acquireGeom (scn , i , category , objtype );
1261
1257
1262
1258
// construct geom
1263
- sz [0 ] = 2 * sz [0 ];
1259
+ sz [0 ] = 2 * sz [0 ];
1264
1260
sz [1 ] = sz [2 ] = sz [0 ];
1265
1261
mju_quat2Mat (mat , pert -> refquat );
1266
1262
mjv_initGeom (thisgeom , mjGEOM_SPHERE , sz , pert -> refselpos , mat , rgba );
@@ -2007,8 +2003,8 @@ void mjv_addGeoms(const mjModel* m, mjData* d, const mjvOption* vopt,
2007
2003
getFrustum (zver , zhor , znear , m -> cam_intrinsic + 4 * i , m -> cam_sensorsize + 2 * i );
2008
2004
2009
2005
// frustum frame to convert from planes to vertex representation
2010
- mjtNum * cam_xpos = d -> cam_xpos + 3 * i ;
2011
- mjtNum * cam_xmat = d -> cam_xmat + 9 * i ;
2006
+ mjtNum * cam_xpos = d -> cam_xpos + 3 * i ;
2007
+ mjtNum * cam_xmat = d -> cam_xmat + 9 * i ;
2012
2008
mjtNum x [] = {cam_xmat [0 ], cam_xmat [3 ], cam_xmat [6 ]};
2013
2009
mjtNum y [] = {cam_xmat [1 ], cam_xmat [4 ], cam_xmat [7 ]};
2014
2010
mjtNum z [] = {cam_xmat [2 ], cam_xmat [5 ], cam_xmat [8 ]};
@@ -2044,37 +2040,36 @@ void mjv_addGeoms(const mjModel* m, mjData* d, const mjvOption* vopt,
2044
2040
if (geomsExhausted (scn )) {
2045
2041
return ;
2046
2042
}
2047
-
2048
2043
thisgeom = acquireGeom (scn , i , category , objtype );
2049
2044
makeTriangle (thisgeom , vnear [e ], vfar [e ], vnear [(e + 1 )%4 ], rgba );
2050
2045
releaseGeom (& thisgeom , scn );
2046
+
2051
2047
if (geomsExhausted (scn )) {
2052
2048
return ;
2053
2049
}
2054
-
2055
2050
thisgeom = acquireGeom (scn , i , category , objtype );
2056
2051
makeTriangle (thisgeom , vfar [e ], vfar [(e + 1 )%4 ], vnear [(e + 1 )%4 ], rgba );
2057
2052
releaseGeom (& thisgeom , scn );
2053
+
2058
2054
if (geomsExhausted (scn )) {
2059
2055
return ;
2060
2056
}
2061
-
2062
2057
thisgeom = acquireGeom (scn , i , category , objtype );
2063
2058
mjv_connector (thisgeom , mjGEOM_LINE , 3 , vnear [e ], vnear [(e + 1 )%4 ]);
2064
2059
f2f (thisgeom -> rgba , rgba , 4 );
2065
2060
releaseGeom (& thisgeom , scn );
2061
+
2066
2062
if (geomsExhausted (scn )) {
2067
2063
return ;
2068
2064
}
2069
-
2070
2065
thisgeom = acquireGeom (scn , i , category , objtype );
2071
2066
mjv_connector (thisgeom , mjGEOM_LINE , 3 , vfar [e ], vfar [(e + 1 )%4 ]);
2072
2067
f2f (thisgeom -> rgba , rgba , 4 );
2073
2068
releaseGeom (& thisgeom , scn );
2069
+
2074
2070
if (geomsExhausted (scn )) {
2075
2071
return ;
2076
2072
}
2077
-
2078
2073
thisgeom = acquireGeom (scn , i , category , objtype );
2079
2074
mjv_connector (thisgeom , mjGEOM_LINE , 3 , vnear [e ], vfar [e ]);
2080
2075
f2f (thisgeom -> rgba , rgba , 4 );
@@ -2505,14 +2500,14 @@ void mjv_addGeoms(const mjModel* m, mjData* d, const mjvOption* vopt,
2505
2500
}
2506
2501
2507
2502
thisgeom = acquireGeom (scn , i , category , objtype );
2508
- nxt = d -> xanchor + 3 * j ;
2503
+ nxt = d -> xanchor + 3 * j ;
2509
2504
2510
2505
// construct geom
2511
2506
mjv_connector (thisgeom , mjGEOM_CAPSULE , scl * m -> vis .scale .connect , cur , nxt );
2512
2507
f2f (thisgeom -> rgba , m -> vis .rgba .connect , 4 );
2513
2508
2514
2509
releaseGeom (& thisgeom , scn );
2515
- cur = nxt ;
2510
+ cur = nxt ;
2516
2511
}
2517
2512
}
2518
2513
@@ -2522,7 +2517,7 @@ void mjv_addGeoms(const mjModel* m, mjData* d, const mjvOption* vopt,
2522
2517
}
2523
2518
2524
2519
thisgeom = acquireGeom (scn , i , category , objtype );
2525
- nxt = d -> xipos + 3 * m -> body_parentid [i ];
2520
+ nxt = d -> xipos + 3 * m -> body_parentid [i ];
2526
2521
mjv_connector (thisgeom , mjGEOM_CAPSULE , scl * m -> vis .scale .connect , cur , nxt );
2527
2522
f2f (thisgeom -> rgba , m -> vis .rgba .connect , 4 );
2528
2523
releaseGeom (& thisgeom , scn );
@@ -2585,7 +2580,7 @@ void mjv_addGeoms(const mjModel* m, mjData* d, const mjvOption* vopt,
2585
2580
for (int i = 1 ; i < m -> nbody ; i ++ ) {
2586
2581
if (!mju_isZero (d -> xfrc_applied + 6 * i , 6 ) && (category & catmask )) {
2587
2582
// point of application and force
2588
- mjtNum * xpos = d -> xipos + 3 * i ;
2583
+ mjtNum * xpos = d -> xipos + 3 * i ;
2589
2584
xfrc = d -> xfrc_applied + 6 * i ;
2590
2585
2591
2586
// force perturbation
@@ -3330,7 +3325,7 @@ void mjv_updateScene(const mjModel* m, mjData* d, const mjvOption* opt,
3330
3325
//----------------------------------- catenary functions -------------------------------------------
3331
3326
3332
3327
// returns hyperbolic cosine and optionally computes hyperbolic sine
3333
- static inline mjtNum cosh_sinh (mjtNum x , mjtNum * sinh ) {
3328
+ static inline mjtNum cosh_sinh (mjtNum x , mjtNum * sinh ) {
3334
3329
mjtNum expx = mju_exp (x );
3335
3330
if (sinh ) {
3336
3331
* sinh = 0.5 * (expx - 1 /expx );
@@ -3348,7 +3343,7 @@ static inline mjtNum catenary_intercept(mjtNum v, mjtNum h, mjtNum length) {
3348
3343
3349
3344
3350
3345
// returns residual of catenary equation and optionally computes its gradient w.r.t b
3351
- static inline mjtNum catenary_residual (mjtNum b , mjtNum intercept , mjtNum * grad ) {
3346
+ static inline mjtNum catenary_residual (mjtNum b , mjtNum intercept , mjtNum * grad ) {
3352
3347
mjtNum a = 0.5 / b ;
3353
3348
mjtNum sinh , cosh = cosh_sinh (a , & sinh );
3354
3349
if (grad ) {
@@ -3364,7 +3359,7 @@ static const mjtNum tolerance = 1e-9;
3364
3359
3365
3360
3366
3361
3367
- // solve trancendental catenary equation using change of variables proposed in
3362
+ // solve transcendental catenary equation using change of variables proposed in
3368
3363
// https://math.stackexchange.com/a/1002996
3369
3364
static inline mjtNum solve_catenary (mjtNum v , mjtNum h , mjtNum length ) {
3370
3365
mjtNum intercept = catenary_intercept (v , h , length );
0 commit comments