HeightField
Vytvoří pravidelnou výškovou mřížku pro Static terrain.
Každý sample určuje veřejnou Z výšku v pravidelné XY mřížce. Wrapper převádí interní orientaci Joltu na Z-up a obrací rows tak, aby veřejné Y rostlo stejně jako vstup.
Syntaxe#
jolt_heightfield_create_static(heights, width, height, cell_size,
x=0, y=0, z=0, options=undefined)Formát heights#
// Ploché row-major pole
heights[row * width + column]
// Nested array
heights[row][column]Ploché pole má width*height hodnot; nested pole přesně height řádků po width hodnotách. Každý sample je konečné lokální Z a může být kladný i záporný.
Rozlišení, rozměry a orientace#
- width a height jsou počty samples, ne world rozměry.
- Mřížka musí být čtvercová: width == height.
- Rozlišení je 4..512 samples na každé straně.
- cell_size je kladná vzdálenost podél X; options.cell_size_y určuje Y a standardně se rovná cell_size.
- World rozsah je (width-1)*cell_size v X a (height-1)*cell_size_y v Y.
- x,y,z je origin prvního sample: [0][0] leží v (x, y, z+heights[0][0]), nejde o střed terrainu.
cell_size_y je jediná shape-specific položka ve společném options structu; po použití při stavbě HeightField ji __jolt_high_apply_options() ignoruje.
Validace a návrat#
Creator odmítne nečtvercovou nebo mimo-limitní mřížku, chybný počet samples, rozdílné rows, NaN/Infinity a nekladné cell sizes. Vrací Static JoltBody nebo undefined. Relevantní options jsou rotation, rotation_euler, friction, restitution, layer a sensor; motion-only options selžou. Podporuje kontakty, filtering, sensor a raycast. Debug používá stride do přibližně 128 samples na osu.
Reusable JoltShape#
var shape = jolt_shape_heightfield(heights, width, height, cell_size,
cache_key=undefined, cell_size_y=undefined);
var terrain = shape.create_static(x, y, z, options);Resource creator má odlišné pořadí posledních optional argumentů. create_dynamic() a create_kinematic() nejsou povoleny. jolt_shape_load() podporuje HeightField .jcol.
Low-Level / Advanced API#
Ergonomický array creator neexistuje. jolt_world_geometry_create(world,payload) očekává interní base64 payload a vždy Static motion; používejte jolt_heightfield_create_static() nebo jolt_shape_heightfield().
Příklad#
var size = 8;
var heights = array_create(size * size, 0);
for (var yy = 0; yy < size; ++yy) {
for (var xx = 0; xx < size; ++xx) {
var dx = xx - 3.5;
var dy = yy - 3.5;
heights[yy * size + xx] = 0.08 * (dx*dx + dy*dy);
}
}
var terrain = jolt_heightfield_create_static(heights, size, size, 1,
-3.5, -3.5, 0, {friction:0.9, cell_size_y:1});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_heightfield_create_static | jolt_heightfield_create_static(source_heights = array_create(16,0), width = 4, height = 4, cell_size = 1, x = 0, y = 0, z = 0, options = undefined) | Statický výškový grid, default 4×4 nulové výšky/cell1m. Čtverec4..512, kladné cell sizes, ploché pole nebo řádky; JoltBody/undefined. |