Constraints
Hinge Constraint
Drží shared anchor pohromadě a dovoluje relativní rotaci kolem jediné world-space osy.
Hinge použijte pro dveře, páky, kola a poháněné čepy. Nabízí úhlové limity ve stupních, měnitelnou referenční rotaci, aktuální úhel a velocity nebo position motor omezený torquem.
Syntaxe#
jolt_hinge(body_a, body_b, anchor_x, anchor_y, anchor_z, axis_x, axis_y, axis_z, options=undefined)
jolt_hinge_world(body, anchor_x, anchor_y, anchor_z, axis_x, axis_y, axis_z, options=undefined)Argumenty#
| Argument | Typ | Popis |
|---|---|---|
| body_a / body_b | JoltBody | Dvě propojená managed tělesa. |
| body | JoltBody | Jediné těleso pro jolt_hinge_world(). |
| anchor_x / anchor_y / anchor_z | Real | Společný world-space pivot. |
| axis_x / axis_y / axis_z | Real | Konečná nenulová world-space osa rotace; interně se normalizuje. |
| options | Struct nebo undefined | Limity, collision, počáteční stav a volitelné nastavení motoru. |
Options#
| Pole | Výchozí | Popis |
|---|---|---|
| limits_min | -180 | Minimální úhel ve stupních vzhledem k referenční orientaci. |
| limits_max | 180 | Maximální úhel ve stupních; musí být >= limits_min. |
| collision | true | Zda připojená uživatelská tělesa mohou kolidovat; jolt_hinge_world() hodnotu ignoruje. |
| enabled | true | Počáteční stav solveru. |
| motor_max_torque | 100 | Konečný nezáporný symetrický limit motor torque v N m. |
| motor_velocity | nenastaveno | Počáteční angular velocity v radiánech za sekundu; vybere velocity režim. |
| motor_position | nenastaveno | Počáteční cílový úhel ve stupních; vybere position režim. |
Metody#
| Metoda | Výsledek | Chování Hinge |
|---|---|---|
| is_valid() | Boolean | Ověří managed wrapper i jeho native generační handle. |
| get_native_handle() | Real | Vrátí neprůhledný native handle, nebo 0 při neplatném constraintu. |
| destroy() | Boolean | Idempotentně uvolní pouze constraint; připojená tělesa zůstanou živá. |
| set_enabled(enabled) / get_enabled() | Boolean | Dočasně odebere nebo obnoví účast v solveru bez zničení constraintu. |
| set_collision_enabled(enabled) / get_collision_enabled() | Boolean | Řídí kolize dvojice těles. World varianty vždy vracejí false. |
| set_limits(minimum, maximum) | Boolean | Aktualizuje seřazené limity ve stupních a probudí obě tělesa. |
| get_limits() | Struct | Vrátí {minimum, maximum} ve stupních. |
| set_rotation(angle) | Boolean | Posune nulu/referenční orientaci bez pohybu těles nebo anchoru. |
| get_angle() | Real | Aktuální signed úhel ve stupních vzhledem k referenci. |
| set_motor_velocity(rad_per_second) | Boolean | Vybere a zapne velocity režim. |
| set_motor_position(degrees) | Boolean | Vybere a zapne position režim. |
| enable_motor(enabled) | Boolean | Motor vypne nebo obnoví jeho poslední režim. |
| set_motor_max_torque(torque) | Boolean | Nastaví symetrický torque limit. |
| set_motor_spring(frequency, damping) | Boolean | Naladí native pružinu position motoru. |
| get_motor_state() | Struct | Vrátí režim, targets, maximální torque a nastavení pružiny. |
| get_spring() | Struct | Vrátí frequency a damping position motoru. |
| get_impulse() | Real | Poslední motor solver impulse, nikoli torque za sekundu. |
Příklad: dveře s limitem#
var frame = jolt_box_create_static(-1.8, 0, 2, 0.3, 0.3, 4);
var door = jolt_box_create_dynamic(0, 0, 2, 3.6, 0.25, 4, { mass: 18 });
var hinge = jolt_hinge(frame, door, -1.8, 0, 2, 0, 0, 1, {
limits_min: 0,
limits_max: 110,
collision: false
});Příklad: position a velocity motor#
hinge.set_motor_max_torque(45);
hinge.set_motor_spring(3, 0.8);
hinge.set_motor_position(90); // stupně
// Později přepněte na velocity režim.
hinge.set_motor_velocity(4); // radiány za sekundu
var angle = hinge.get_angle();
var state = hinge.get_motor_state();Referenční rotace#
set_rotation(angle) změní nulu Hinge a zachová handle, anchor, limity, collision state i motor settings. Existující limity se následně měří od nové reference.
World varianta#
var lever = jolt_box_create_dynamic(0, 0, 2, 4, 0.3, 0.3, { mass: 6 });
var pivot = jolt_hinge_world(lever, -2, 0, 2, 0, 1, 0, {
limits_min: -35,
limits_max: 35
});Chyby a životní cyklus#
- Body-to-body creatory vyžadují dvě různá živá managed JoltBody ve stejném managed výchozím worldu.
- Alespoň jedno připojené těleso musí být pohyblivé; nepodporovaná static-static dvojice v native Jolt selže.
- Constructory při úspěchu vracejí managed JoltConstraint, při validační nebo native chybě undefined.
- Zničení kteréhokoli připojeného tělesa nejprve automaticky zničí a zneplatní jeho constrainty.
- Po selhání creatoru nebo metody čtěte jolt_get_error(), zejména u nedůvěryhodných hodnot.
- Anchor a axis komponenty musí být konečné a osa musí mít nenulovou délku.
- Limity musí být konečné a seřazené; motor torque musí být konečný a nezáporný.
- Obsahují-li options současně motor_velocity i motor_position, position se aplikuje poslední a bude aktivní.
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 |
|---|---|---|
| jolt_hinge | jolt_hinge(body_a, body_b, anchor_x, anchor_y, anchor_z, axis_x, axis_y, axis_z, options = undefined) | Vrací JoltConstraint/undefined, nevlastní tělesa. Dvě různá živá tělesa stejného světa; _world varianta jedno Dynamic těleso a pevný svět. Enabled default true; běžné dvoutělesové collision default true, pokud není dále uvedeno jinak. Po vytvoření ověř i jolt_has_error: některé navazující options mohou selhat a přesto vrátit vytvořený constraint. Světová kotva/nenulová osa; limits_min/max default-180/180°, min[-180, 0], max[0, 180]. |
| jolt_hinge_world | jolt_hinge_world(body, anchor_x, anchor_y, anchor_z, axis_x, axis_y, axis_z, options = undefined) | Vrací JoltConstraint/undefined, nevlastní tělesa. Dvě různá živá tělesa stejného světa; _world varianta jedno Dynamic těleso a pevný svět. Enabled default true; běžné dvoutělesové collision default true, pokud není dále uvedeno jinak. Po vytvoření ověř i jolt_has_error: některé navazující options mohou selhat a přesto vrátit vytvořený constraint. Světová kotva/nenulová osa; limits_min/max default-180/180°, min[-180, 0], max[0, 180]. |
| JoltConstraint.get_angle | JoltConstraint.get_angle() | Aktuální Hinge/Cone úhel ve stupních; při neplatném/nepodporovaném constraintu nebo chybě 0 a chybový stav. |
| JoltConstraint.get_friction_torque | JoltConstraint.get_friction_torque() | Pouze SwingTwist; konečný nezáporný odporový moment v N·m. Setter Boolean, getter číslo nebo 0 při chybě. |
| JoltConstraint.set_friction_torque | JoltConstraint.set_friction_torque(torque) | Pouze SwingTwist; konečný nezáporný odporový moment v N·m. Setter Boolean, getter číslo nebo 0 při chybě. |