Tělesa

Mesh

Vytvoří trojúhelníkovou, potenciálně konkávní Static kolizní geometrii.

Mesh je určen pro levely, místnosti, skály a další detailní nepohyblivou geometrii. Jolt mesh nemá objem jako convex solid, je jednostranný a pro pohyblivé objekty dražší a méně robustní; použijte primitivum, Convex nebo Compound.

Syntaxe#

Syntax
jolt_mesh_create_static(vertices, indices, x=0, y=0, z=0, options=undefined)

vertices#

Pole 3 až 65536 lokálních bodů ve tvaru [x,y,z] nebo {x,y,z}; všechny komponenty jsou konečné. x,y,z creatoru je world-space origin přičtený k vertexům, nikoli automatický geometrický střed.

indices, triangles a winding#

GML
[a0,b0,c0, a1,b1,c1, ...]
  • Každý index je integer 0..array_length(vertices)-1.
  • Povoleno je 1..131072 triangles, tedy 3..393216 indexů; počet musí být násobek tří.
  • Winding je counter-clockwise při pohledu z přední strany.
  • Simulace i veřejný raycast jsou jednostranné; raycast používá IgnoreBackFaces.
  • Jolt odstraní duplicitní a degenerované triangles. Alespoň jeden použitelný triangle musí zůstat; wrapper neprovádí další simplification ani convex decomposition.

Options, návrat a omezení#

Vrací Static JoltBody nebo undefined. Relevantní options jsou rotation, rotation_euler, friction, restitution, layer a sensor. mass, velocity a jiné Dynamic-only položky selžou a creator body odstraní. Mesh podporuje filtering, sensor eventy, kontakty a raycasty. Debug draw kreslí metadata edges; nad 2048 triangles používá pravidelný stride.

Reusable JoltShape#

GML
var shape = jolt_shape_mesh(vertices, indices, cache_key=undefined);
var level = shape.create_static(x, y, z, options);

shape.create_dynamic() a create_kinematic() vracejí undefined. jolt_shape_load() podporuje Mesh .jcol; resource je doporučen pro více instancí stejné mapy.

BBMOD#

GML
var shape = jolt_shape_mesh_from_bbmod(model);
var body = shape.create_static(0, 0, 0, {friction:0.8});

Použijte načtený BBMOD model před zmrazením jeho bufferů.

Low-Level / Advanced API#

Ergonomický array creator neexistuje. jolt_world_geometry_create() vyžaduje interní versionovaný base64 payload a soukromý jolt_world_shape_command() je pouze transport reusable shape vrstvy.

Příklad#

GML
var vertices = [[-3,-3,0], [3,-3,0], [3,3,0], [-3,3,0]];
var indices = [0,1,2, 0,2,3]; // CCW shora, normála +Z
var level_mesh = jolt_mesh_create_static(vertices, indices, 0, 0, 0, {
    friction:0.85
});

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_mesh_create_staticjolt_mesh_create_static(vertices = [[-0.5,-0.5,0],[0.5,-0.5,0],[0.5,0.5,0],[-0.5,0.5,0]], indices = [0,1,2,0,2,3], x = 0, y = 0, z = 0, options = undefined)Statický triangle mesh; místní vertices/indices, default XY čtverec se2 trojúhelníky. Limity jako jolt_shape_mesh, pozice default 0. JoltBody/undefined; žádná Dynamic/Kinematic varianta.