Aktuální projekt

Objemový měkký kvádr

Pozice je střed; width/depth/height jsou celé délky X/Y/Z v metrech. Každá buňka má šest tetraedrů. Výchozí rozlišení 4 vytvoří 125 částic a 384 tetraedrů. Rozlišení se určuje při vytvoření. Tento typ má objemovou tuhost, nikoli setter tlaku.

Příklad#

GML
soft = jolt_soft_body_create_box(0, 0, 3, 2, 1, 1, {resolution:4});
if (!is_undefined(soft)) {
    soft.set_mass(2);
    soft.set_stiffness(0.3);
    soft.set_volume_stiffness(0.8);
    soft.set_damping(0.5);
    soft.set_renderer(o_control_bbmod_renderer.renderer);
}

Použití a omezení#

Stiffness řídí pružné hrany; volume stiffness odpor proti změně objemu. Obojí má 0..1. Nula je nejměkčí konečná poddajnost, nikoli odstranění všech vazeb; jednička nevytvoří pevné těleso. Vyšší rozlišení stojí více simulačního času. Úchyty mohou obsahovat vnitřní částice; Carry drží okolí povrchu.

get_volume vrací aktuální podepsaný objem, get_position průměr poloh částic a get_vertex_position(index) světové souřadnice částice. Vykreslování se aktualizuje přes BBMOD a stávající fyzikální smyčku.

Přehled API#

Signatury veřejných funkcí a metod. Metody volejte na vrácené instanci; parametry s výchozí hodnotou jsou volitelné.

Funkce / metodaSignatura
jolt_soft_body_create_boxjolt_soft_body_create_box(x,y,z,width,depth,height,settings=undefined)
JoltBBMODBox.add_forceJoltBBMODBox.add_force(x,y,z)
JoltBBMODBox.destroyJoltBBMODBox.destroy()
JoltBBMODBox.drawJoltBBMODBox.draw()
JoltBBMODBox.get_collision_thicknessJoltBBMODBox.get_collision_thickness()
JoltBBMODBox.get_dampingJoltBBMODBox.get_damping()
JoltBBMODBox.get_frictionJoltBBMODBox.get_friction()
JoltBBMODBox.get_gravity_factorJoltBBMODBox.get_gravity_factor()
JoltBBMODBox.get_layerJoltBBMODBox.get_layer()
JoltBBMODBox.get_massJoltBBMODBox.get_mass()
JoltBBMODBox.get_native_handleJoltBBMODBox.get_native_handle()
JoltBBMODBox.get_positionJoltBBMODBox.get_position()
JoltBBMODBox.get_stretchJoltBBMODBox.get_stretch()
JoltBBMODBox.get_vertex_positionJoltBBMODBox.get_vertex_position(index)
JoltBBMODBox.get_volumeJoltBBMODBox.get_volume()
JoltBBMODBox.get_volume_stiffnessJoltBBMODBox.get_volume_stiffness()
JoltBBMODBox.is_validJoltBBMODBox.is_valid()
JoltBBMODBox.renderJoltBBMODBox.render()
JoltBBMODBox.set_collision_thicknessJoltBBMODBox.set_collision_thickness(v)
JoltBBMODBox.set_dampingJoltBBMODBox.set_damping(v)
JoltBBMODBox.set_debugJoltBBMODBox.set_debug(v)
JoltBBMODBox.set_debug_internalJoltBBMODBox.set_debug_internal(v)
JoltBBMODBox.set_frictionJoltBBMODBox.set_friction(v)
JoltBBMODBox.set_gravity_factorJoltBBMODBox.set_gravity_factor(v)
JoltBBMODBox.set_layerJoltBBMODBox.set_layer(layer)
JoltBBMODBox.set_massJoltBBMODBox.set_mass(v)
JoltBBMODBox.set_materialJoltBBMODBox.set_material(material)
JoltBBMODBox.set_rendererJoltBBMODBox.set_renderer(renderer)
JoltBBMODBox.set_stretchJoltBBMODBox.set_stretch(v)
JoltBBMODBox.set_visibleJoltBBMODBox.set_visible(value)
JoltBBMODBox.set_volume_stiffnessJoltBBMODBox.set_volume_stiffness(v)
JoltBBMODBox.update_meshJoltBBMODBox.update_mesh(force=false)

Související návody#

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íkSignaturaKontrakt operace
jolt_soft_body_create_boxjolt_soft_body_create_box(x,y,z,width,depth,height,settings=undefined)Vrací JoltBBMODBox nebo undefined v běžícím světě. Plné rozměry X/Y/Z .05..100 m. Options mass=2, stiffness=.3, volume_stiffness=.8, damping=.5, friction=.5, gravity_factor=1, collision_thickness=.02, resolution=4 (celé 1..10), rotation_x/y/z=0°, default layer. Částic je (resolution+1)^3; thickness ≤ polovina nejmenšího rozměru.
JoltBBMODBox.add_forceJoltBBMODBox.add_force(x,y,z)Konečné světové složky síly x/y/z v N; Boolean. Předává celkovou sílu nativnímu soft body, není to lokální výběr částic. Pro lokální účinek použij jolt_soft_body_force.
JoltBBMODBox.destroyJoltBBMODBox.destroy()Boolean, opakovaně true po úspěšném zničení. Nejprve odstraní fyziku, pak registraci rendereru, vlastní meshe/materiály, attachmenty, wind a force helpery. Vypůjčené materiály ani hostitelská tělesa neničí.
JoltBBMODBox.drawJoltBBMODBox.draw()Vykreslí aktuální deformovanou geometrii, pokud je objekt živý a viditelný; bez návratové hodnoty. draw je alias render. Při registraci v rendereru je navíc ručně nevolej.
JoltBBMODBox.get_collision_thicknessJoltBBMODBox.get_collision_thickness()Aktuální poloměr částice v m; undefined při neplatném wrapperu, nativní chybu kontroluj zvlášť.
JoltBBMODBox.get_dampingJoltBBMODBox.get_damping()Lineární tlumení: aktuální číslo v 1/s. Selhání: undefined (invalid wrapper); inspect native errors separately; neplatný objekt není nulové měření.
JoltBBMODBox.get_frictionJoltBBMODBox.get_friction()Součinitel tření: aktuální číslo v bezrozměrné stupnici. Selhání: undefined (invalid wrapper); inspect native errors separately; neplatný objekt není nulové měření.
JoltBBMODBox.get_gravity_factorJoltBBMODBox.get_gravity_factor()Násobek gravitace: aktuální číslo v bezrozměrné stupnici. Selhání: undefined (invalid wrapper); inspect native errors separately; neplatný objekt není nulové měření.
JoltBBMODBox.get_layerJoltBBMODBox.get_layer()Vrací číselný handle vrstvy, nikoliv JoltLayer; undefined při neplatném wrapperu.
JoltBBMODBox.get_massJoltBBMODBox.get_mass()Celková hmotnost: aktuální číslo v kg. Selhání: undefined; neplatný objekt není nulové měření.
JoltBBMODBox.get_native_handleJoltBBMODBox.get_native_handle()Platný soft-body handle, jinak 0. Nejde o JoltBody handle pro rigid metody.
JoltBBMODBox.get_positionJoltBBMODBox.get_position()Světový průměr pozic částic {x, y, z} v m, nikoliv rigid transform; undefined při neplatném wrapperu.
JoltBBMODBox.get_stretchJoltBBMODBox.get_stretch()Tuhost natažení: aktuální číslo v bezrozměrné stupnici. Selhání: undefined; neplatný objekt není nulové měření.
JoltBBMODBox.get_vertex_positionJoltBBMODBox.get_vertex_position(index)Celočíselný index 0 ≤ index < vertex_count. Vrací světové {x, y, z} v m, při neplatném indexu/wrapperu undefined.
JoltBBMODBox.get_volumeJoltBBMODBox.get_volume()Objem v m³ z aktuální deformace; otevřená modelová látka vrací 0. undefined při neplatném objektu nebo selhání čtení.
JoltBBMODBox.get_volume_stiffnessJoltBBMODBox.get_volume_stiffness()Tuhost objemu: aktuální číslo v bezrozměrné stupnici. Selhání: undefined; neplatný objekt není nulové měření.
JoltBBMODBox.is_validJoltBBMODBox.is_valid()Boolean podle wrapperu, handle a původního managed světa. Není to dotaz na existenci každé nativní částice; nemíchej ruční raw destrukci s managed vlastnictvím.
JoltBBMODBox.renderJoltBBMODBox.render()Vykreslí aktuální deformovanou geometrii, pokud je objekt živý a viditelný; bez návratové hodnoty. draw je alias render. Při registraci v rendereru je navíc ručně nevolej.
JoltBBMODBox.set_collision_thicknessJoltBBMODBox.set_collision_thickness(v)Poloměr kolize částice v m, konečný ≥0. Horní mez: poloměr Sphere, polovina nejmenšího rozměru Box, polovina nejkratší hrany modelu. Boolean; výchozí 0.02 Sphere/Box, model 0.01 nebo menší hodnota přizpůsobená hraně při vynechání options.
JoltBBMODBox.set_dampingJoltBBMODBox.set_damping(v)Lineární tlumení: konečné číslo 0..1000 1/s; výchozí 0.1 Sphere, 0.5 Box, 0.2 closed model / 0.1 model cloth. Vrací true při přijetí, false při neplatném vstupu nebo neplatném objektu. Mění živý objekt.
JoltBBMODBox.set_debugJoltBBMODBox.set_debug(v)Zapne diagnostické vykreslení, výchozí false; vrací true. Nemění fyziku ani životnost objektu.
JoltBBMODBox.set_debug_internalJoltBBMODBox.set_debug_internal(v)Boolean převod; při zapnutí zapne i běžný debug. Vrací true, bez změny fyziky.
JoltBBMODBox.set_frictionJoltBBMODBox.set_friction(v)Součinitel tření: konečné číslo 0..1000 ; výchozí 0.5. Vrací true při přijetí, false při neplatném vstupu nebo neplatném objektu. Mění živý objekt.
JoltBBMODBox.set_gravity_factorJoltBBMODBox.set_gravity_factor(v)Násobek gravitace: konečné číslo 0..1000 ; výchozí 1. Vrací true při přijetí, false při neplatném vstupu nebo neplatném objektu. Mění živý objekt.
JoltBBMODBox.set_layerJoltBBMODBox.set_layer(layer)JoltLayer nebo kladný celočíselný handle vrstvy; vrstva musí existovat v tomto světě. Boolean. Nemění kolizní matici vrstev.
JoltBBMODBox.set_massJoltBBMODBox.set_mass(v)Celková hmotnost: konečné číslo 0.01..1000000 kg; výchozí 2 (Sphere/Box), 2 closed model / 1 model cloth. Vrací true při přijetí, false při neplatném vstupu nebo neplatném objektu. Mění živý objekt.
JoltBBMODBox.set_materialJoltBBMODBox.set_material(material)BBMOD_BaseMaterial nebo undefined pro automatický vlastní oboustranný materiál. Boolean; uživatelský materiál se vypůjčuje a neničí, předchozí vlastní materiál se uvolní.
JoltBBMODBox.set_rendererJoltBBMODBox.set_renderer(renderer)Živý BBMOD_BaseRenderer nebo undefined pro odpojení. Boolean; registruje/odregistruje tentýž objekt, nepřidávej jej navíc ručně. Vyžaduje živé soft body.
JoltBBMODBox.set_stretchJoltBBMODBox.set_stretch(v)Tuhost natažení: konečné číslo 0..1 ; výchozí 0.8 Sphere/closed model, 0.3 Box, 0.9 model cloth. Vrací true při přijetí, false při neplatném vstupu nebo neplatném objektu. Mění živý objekt.
JoltBBMODBox.set_visibleJoltBBMODBox.set_visible(value)Převod vstupu na Boolean, výchozí true. Vrací Boolean úspěchu. Skryje render, nevypne fyziku.
JoltBBMODBox.set_volume_stiffnessJoltBBMODBox.set_volume_stiffness(v)Tuhost objemu: konečné číslo 0..1 ; výchozí 0.8. Vrací true při přijetí, false při neplatném vstupu nebo neplatném objektu. Mění živý objekt.
JoltBBMODBox.update_meshJoltBBMODBox.update_mesh(force=false)Boolean úspěchu; force=false využívá cache fyzikální revize. force=true vynutí aktualizaci i při ručním native kroku. Pozice jsou již světové, nepřidávej znovu transformační matici tělesa.