Rotace
Čte a mění orientaci body pomocí quaternionu nebo Euler helperů.
Kanonická native reprezentace je normalizovaný quaternion {x,y,z,w}. High-level helpery přijímají také Euler úhly ve stupních kolem veřejných os X, poté Y a Z.
High-Level API#
body.get_rotation()
body.get_rotation_euler()
body.set_rotation(x, y, z)
body.set_rotation(x, y, z, w)
body.set_rotation_euler(x_degrees, y_degrees, z_degrees)Pravidla overloadu#
| Volání | Význam | Návrat |
|---|---|---|
| set_rotation(x,y,z) | Euler stupně | Boolean |
| set_rotation(x,y,z,w) | Quaternion | Boolean |
| get_rotation() | Normalizovaný quaternion {x,y,z,w} | Struct nebo undefined |
| get_rotation_euler() | Převedené Euler stupně {x,y,z} | Struct nebo undefined |
Skládání Euler rotací#
jolt_quaternion_from_euler() skládá q = qZ * qY * qX, takže rotace se aplikují kolem veřejné X, poté Y a nakonec Z. Euler reprezentace není jednoznačná a poblíž gimbal lock může být nestabilní; pro přesný round-trip uchovávejte quaternion.
Creation options#
var body = jolt_box_create_dynamic(0, 0, 3, 2, 1, 1, {
rotation: {x:0, y:0, z:0, w:1}
});
var tilted = jolt_box_create_dynamic(3, 0, 3, 2, 1, 1, {
rotation_euler: {x:15, y:30, z:90}
});Jsou-li přítomny rotation i rotation_euler, nejprve se použije quaternion a rotation_euler jej následně nahradí. Pro jednoznačnost zadávejte pouze jednu variantu.
Chování motion typu#
- Změna rotace je okamžitá transformace, nikoli angular motion.
- Dynamic a Kinematic bodies se aktivují; Static se aktualizují bez aktivace.
- Pro časovaný Kinematic pohyb použijte move_kinematic nebo move_kinematic_euler.
- Pro simulovanou rotaci použijte angular velocity, torque nebo angular impulse.
Low-Level / Advanced API#
Settery vracejí true při úspěchu a false při neplatném vstupu, invalidním nebo stale body či nepodporovaném motion typu. Gettery vracejí požadovanou hodnotu nebo undefined při selhání. High-level chybu zjistíte přes jolt_get_error().
Ověřené kontrakty operací#
Následující kontrakty rozlišují jednotky, návratové hodnoty, chyby a životnost podle aktuální implementace. Nevynechávej kontrolu výsledku: false, 0 a undefined mohou mít u různých metod odlišný význam.
| Symbol / vlastník | Signatura | Kontrakt operace |
|---|---|---|
| JoltBody.clear_grab_rotation | JoltBody.clear_grab_rotation() | Místní grab rámec +Y forward/+Z up. Setter přijímá quaternion struct či čtyři složky, tři znamenají Euler°. Clear identity; settery Boolean, getter XYZW nebo undefined při neplatnosti. |
| JoltBody.get_grab_rotation | JoltBody.get_grab_rotation() | Místní grab rámec +Y forward/+Z up. Setter přijímá quaternion struct či čtyři složky, tři znamenají Euler°. Clear identity; settery Boolean, getter XYZW nebo undefined při neplatnosti. |
| JoltBody.get_rotation | JoltBody.get_rotation() | Světový {x, y, z} m / quaternion XYZW / Euler XYZ° / {position, rotation}, dle metody. undefined při chybě. Pozice je origin tělesa, ne COM. |
| JoltBody.get_rotation_euler | JoltBody.get_rotation_euler() | Světový {x, y, z} m / quaternion XYZW / Euler XYZ° / {position, rotation}, dle metody. undefined při chybě. Pozice je origin tělesa, ne COM. |
| JoltBody.set_grab_rotation | JoltBody.set_grab_rotation(x,y=undefined,z=undefined,w=undefined) | Místní grab rámec +Y forward/+Z up. Setter přijímá quaternion struct či čtyři složky, tři znamenají Euler°. Clear identity; settery Boolean, getter XYZW nebo undefined při neplatnosti. |
| JoltBody.set_grab_rotation_euler | JoltBody.set_grab_rotation_euler(x,y,z) | Místní grab rámec +Y forward/+Z up. Setter přijímá quaternion struct či čtyři složky, tři znamenají Euler°. Clear identity; settery Boolean, getter XYZW nebo undefined při neplatnosti. |
| JoltBody.set_rotation | JoltBody.set_rotation(x, y, z, w = undefined) | Boolean teleportu; světová pozice m, rotace XYZW nebo Euler XYZ°. set_rotation se třemi složkami znamená Euler°, se čtyřmi quaternion. Synchronizuje připojené senzory; pro pohyblivou plošinu použij move_kinematic. |
| JoltBody.set_rotation_euler | JoltBody.set_rotation_euler(x, y, z) | Boolean teleportu; světová pozice m, rotace XYZW nebo Euler XYZ°. set_rotation se třemi složkami znamená Euler°, se čtyřmi quaternion. Synchronizuje připojené senzory; pro pohyblivou plošinu použij move_kinematic. |