Aktuální projekt

Import uzavřeného modelu

Importujte statický čitelný BBMOD triangle-list model před freeze(). Vyžaduje se jeden propojený uzavřený manifoldní plášť s konzistentní orientací a bez duplicitních, degenerovaných či protínajících se ploch. Shodné float32 pozice se svaří; mezery se neopravují. Transformace uzlů a počáteční měřítko/rotace se zapečou. x/y/z posouvají origin modelu, nikoli automaticky vystředěnou síť.

Příklad#

GML
soft = jolt_soft_body_create_from_model(model_physics, 0, 0, 3, {scale:0.5});
if (!is_undefined(soft)) {
    soft.set_mass(2);
    soft.set_stiffness(0.6);
    soft.set_pressure(50);
    soft.set_renderer(o_control_bbmod_renderer.renderer);
}

Použití a omezení#

Limity: 4096 svařených částic, 8192 trojúhelníků, nejkratší hrana alespoň 0.002 m. Kolizní tloušťka nesmí přesáhnout polovinu nejkratší hrany. Primární UV a materiálové skupiny se zachovají; skinning, vertex colors, UV2 a batch IDs se odmítají. Zdrojový model zůstává beze změny.

Jde o tlakový plášť, nikoli automatickou objemovou tetraedrizaci. Po vytvoření nastavte hmotnost, tuhost a tlak. Detailní vizuál, pojmenované/prostorové úchyty, Carry, lokální síly a vítr používají společné Soft Body API.

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_from_modeljolt_soft_body_create_from_model(model,x=0,y=0,z=0,settings=undefined)
JoltBBMODModel.add_forceJoltBBMODModel.add_force(x,y,z)
JoltBBMODModel.destroyJoltBBMODModel.destroy()
JoltBBMODModel.drawJoltBBMODModel.draw()
JoltBBMODModel.get_collision_thicknessJoltBBMODModel.get_collision_thickness()
JoltBBMODModel.get_dampingJoltBBMODModel.get_damping()
JoltBBMODModel.get_frictionJoltBBMODModel.get_friction()
JoltBBMODModel.get_gravity_factorJoltBBMODModel.get_gravity_factor()
JoltBBMODModel.get_layerJoltBBMODModel.get_layer()
JoltBBMODModel.get_massJoltBBMODModel.get_mass()
JoltBBMODModel.get_native_handleJoltBBMODModel.get_native_handle()
JoltBBMODModel.get_positionJoltBBMODModel.get_position()
JoltBBMODModel.get_pressureJoltBBMODModel.get_pressure()
JoltBBMODModel.get_vertex_positionJoltBBMODModel.get_vertex_position(index)
JoltBBMODModel.get_volumeJoltBBMODModel.get_volume()
JoltBBMODModel.is_validJoltBBMODModel.is_valid()
JoltBBMODModel.renderJoltBBMODModel.render()
JoltBBMODModel.set_collision_thicknessJoltBBMODModel.set_collision_thickness(v)
JoltBBMODModel.set_dampingJoltBBMODModel.set_damping(v)
JoltBBMODModel.set_debugJoltBBMODModel.set_debug(v)
JoltBBMODModel.set_frictionJoltBBMODModel.set_friction(v)
JoltBBMODModel.set_gravity_factorJoltBBMODModel.set_gravity_factor(v)
JoltBBMODModel.set_layerJoltBBMODModel.set_layer(layer)
JoltBBMODModel.set_massJoltBBMODModel.set_mass(v)
JoltBBMODModel.set_materialJoltBBMODModel.set_material(material)
JoltBBMODModel.set_pressureJoltBBMODModel.set_pressure(v)
JoltBBMODModel.set_rendererJoltBBMODModel.set_renderer(renderer)
JoltBBMODModel.set_visibleJoltBBMODModel.set_visible(value)
JoltBBMODModel.update_meshJoltBBMODModel.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_from_modeljolt_soft_body_create_from_model(model,x=0,y=0,z=0,settings=undefined)Vytvoří uzavřený model jako JoltBBMODModel nebo vrátí undefined. Načtený statický BBMOD_Model před freeze(), bez kostí, triangle-list, nejvýše 4096 svařených vrcholů/8192 trojúhelníků. Node transformy a options scale (výchozí 1, absolutně 1e-5..10000), rotation_x/y/z (0°) se zapečou jednou. Pozice je světová, default 0. Model ani jeho materiály nepřebírá do vlastnictví. Uzavřený: mass=2, stiffness=.8, pressure=50, damping=.2; látka: mass=1, stretch=.9, bend=.3, pressure=0, damping=.1. Společné friction=.5, gravity_factor=1, thickness=.01 (při vynechání přizpůsobené nejkratší hraně), default layer.
JoltBBMODModel.add_forceJoltBBMODModel.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.
JoltBBMODModel.destroyJoltBBMODModel.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čí.
JoltBBMODModel.drawJoltBBMODModel.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.
JoltBBMODModel.get_collision_thicknessJoltBBMODModel.get_collision_thickness()Aktuální poloměr částice v m; undefined při neplatném wrapperu, nativní chybu kontroluj zvlášť.
JoltBBMODModel.get_dampingJoltBBMODModel.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í.
JoltBBMODModel.get_frictionJoltBBMODModel.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í.
JoltBBMODModel.get_gravity_factorJoltBBMODModel.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í.
JoltBBMODModel.get_layerJoltBBMODModel.get_layer()Vrací číselný handle vrstvy, nikoliv JoltLayer; undefined při neplatném wrapperu.
JoltBBMODModel.get_massJoltBBMODModel.get_mass()Celková hmotnost: aktuální číslo v kg. Selhání: undefined; neplatný objekt není nulové měření.
JoltBBMODModel.get_native_handleJoltBBMODModel.get_native_handle()Platný soft-body handle, jinak 0. Nejde o JoltBody handle pro rigid metody.
JoltBBMODModel.get_positionJoltBBMODModel.get_position()Světový průměr pozic částic {x, y, z} v m, nikoliv rigid transform; undefined při neplatném wrapperu.
JoltBBMODModel.get_pressureJoltBBMODModel.get_pressure()Vnitřní tlak uzavřeného povrchu: aktuální číslo v N/m². Selhání: undefined; neplatný objekt není nulové měření. Otevřená modelová látka nemá tlak; nenulové nastavení odmítne.
JoltBBMODModel.get_vertex_positionJoltBBMODModel.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.
JoltBBMODModel.get_volumeJoltBBMODModel.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í.
JoltBBMODModel.is_validJoltBBMODModel.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.
JoltBBMODModel.renderJoltBBMODModel.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.
JoltBBMODModel.set_collision_thicknessJoltBBMODModel.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.
JoltBBMODModel.set_dampingJoltBBMODModel.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.
JoltBBMODModel.set_debugJoltBBMODModel.set_debug(v)Zapne diagnostické vykreslení, výchozí false; vrací true. Nemění fyziku ani životnost objektu.
JoltBBMODModel.set_frictionJoltBBMODModel.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.
JoltBBMODModel.set_gravity_factorJoltBBMODModel.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.
JoltBBMODModel.set_layerJoltBBMODModel.set_layer(layer)JoltLayer nebo kladný celočíselný handle vrstvy; vrstva musí existovat v tomto světě. Boolean. Nemění kolizní matici vrstev.
JoltBBMODModel.set_massJoltBBMODModel.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.
JoltBBMODModel.set_materialJoltBBMODModel.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í.
JoltBBMODModel.set_pressureJoltBBMODModel.set_pressure(v)Vnitřní tlak uzavřeného povrchu: konečné číslo 0..1000000 N/m²; výchozí 1000 Sphere, 50 closed model, 0 open model cloth. Vrací true při přijetí, false při neplatném vstupu nebo neplatném objektu. Mění živý objekt. Otevřená modelová látka nemá tlak; nenulové nastavení odmítne.
JoltBBMODModel.set_rendererJoltBBMODModel.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.
JoltBBMODModel.set_visibleJoltBBMODModel.set_visible(value)Převod vstupu na Boolean, výchozí true. Vrací Boolean úspěchu. Skryje render, nevypne fyziku.
JoltBBMODModel.update_meshJoltBBMODModel.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.