Convex
Vytvoří nejmenší konvexní obal z množiny lokálních 3D bodů.
Body nemusí být seřazené ani tvořit hotové stěny a mohou ležet uvnitř nebo na hranách hullu. Convex je vhodný pro dynamické nepravidelné, ale konvexní objekty. Konkávní model rozdělte na Compound části nebo použijte Static Mesh.
Syntaxe#
jolt_convex_create_dynamic(points, x, y, z, options=undefined)
jolt_convex_create_static(points, x, y, z, options=undefined)
jolt_convex_create_kinematic(points, x, y, z, options=undefined)Formát points#
var points = [
[x, y, z],
{x:x, y:y, z:z}
];Pole musí mít 4 až 4096 položek a každá komponenta musí být konečné reálné číslo. Body jsou lokální; x, y, z creatoru jsou world-space origin a vstup se automaticky neposouvá na jiný pivot. Rotaci určují common options nebo JoltBody metody.
Limity a validace#
- Výsledný Jolt ConvexHullShape má nejvýše 256 hull vrcholů.
- Vnitřní, duplicitní a body na ploše nemusí být ve výsledném hullu.
- Shodné body bez rozsahu, kolineární, koplanární a nulově objemové množiny jsou odmítnuty.
- Nearly-degenerate množina může selhat toleranční kontrolou.
- Selhání nebo praktický limit vrací undefined s JOLT_ERROR_CREATION_FAILED.
- Používá se default ConvexHullShapeSettings; veřejně nelze nastavit hull tolerance, convex radius, face material ani předem definované faces.
Návrat a chování#
Vrací JoltBody nebo undefined. Podporuje běžné JoltBody vlastnosti, collision layers, sensor režim, kontakty a raycasty; omezení motion typu se uplatní na síly, mass a velocity. Dynamic podporuje mass, síly a impulzy; Static/Kinematic respektují svá omezení. Debug draw nekreslí skutečné faces, ale pro prvních nejvýše 64 vstupních bodů spojnice každé dvojice.
Reusable JoltShape#
var shape = jolt_shape_convex(points, cache_key=undefined);
shape.create_dynamic(x, y, z, options);
shape.create_static(x, y, z, options);
shape.create_kinematic(x, y, z, options);Resource má stejné limity a je vhodný pro opakované použití. jolt_shape_load() podporuje Convex .jcol.
Low-Level / Advanced API#
Ergonomický low-level array creator neexistuje. jolt_world_geometry_create(world, payload) očekává interní versionovaný base64 payload; běžný kód má použít jolt_convex_create_dynamic() nebo jolt_shape_convex().
Příklad#
var points = [
[-0.9,-0.7,-0.6], [0.8,-0.8,-0.5],
[1.0,0.6,-0.4], [-0.7,0.9,-0.55],
[-0.35,-0.25,0.95], [0.55,0.2,0.75]
];
var rock = jolt_convex_create_dynamic(points, 0, 0, 6, {
mass:1.7, friction:0.7, restitution:0.05
});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_convex_create_dynamic | jolt_convex_create_dynamic(points = [[-0.5,-0.5,-0.5],[0.5,-0.5,-0.5],[0.5,0.5,-0.5],[-0.5,0.5,-0.5],[-0.5,-0.5,0.5],[0.5,-0.5,0.5],[0.5,0.5,0.5],[-0.5,0.5,0.5]], x = 0, y = 0, z = 0, options = undefined) | Factory odpovídajícího motion type, pozice XYZ default 0 m a options. 4..4096 místních bodů XYZ; bez bodů krychle ±.5 m, native musí vytvořit nenulový objem. Vrací JoltBody/undefined; chyba options uklidí nově vytvořené těleso. Konečné rozměry, změny přes set_ zachovají identitu. |
| jolt_convex_create_kinematic | jolt_convex_create_kinematic(points = [[-0.5,-0.5,-0.5],[0.5,-0.5,-0.5],[0.5,0.5,-0.5],[-0.5,0.5,-0.5],[-0.5,-0.5,0.5],[0.5,-0.5,0.5],[0.5,0.5,0.5],[-0.5,0.5,0.5]], x = 0, y = 0, z = 0, options = undefined) | Factory odpovídajícího motion type, pozice XYZ default 0 m a options. 4..4096 místních bodů XYZ; bez bodů krychle ±.5 m, native musí vytvořit nenulový objem. Vrací JoltBody/undefined; chyba options uklidí nově vytvořené těleso. Konečné rozměry, změny přes set_ zachovají identitu. |
| jolt_convex_create_static | jolt_convex_create_static(points = [[-0.5,-0.5,-0.5],[0.5,-0.5,-0.5],[0.5,0.5,-0.5],[-0.5,0.5,-0.5],[-0.5,-0.5,0.5],[0.5,-0.5,0.5],[0.5,0.5,0.5],[-0.5,0.5,0.5]], x = 0, y = 0, z = 0, options = undefined) | Factory odpovídajícího motion type, pozice XYZ default 0 m a options. 4..4096 místních bodů XYZ; bez bodů krychle ±.5 m, native musí vytvořit nenulový objem. Vrací JoltBody/undefined; chyba options uklidí nově vytvořené těleso. Konečné rozměry, změny přes set_ zachovají identitu. |