trackBuilder/multiTrackMerger - Track Intersection Merging
Reference for `extensions/util/trackBuilder/multiTrackMerger.lua`. Creates procedural meshes at intersection points where multiple track segments meet, filling the gaps with bezier-interpolated surfac
Reference for extensions/util/trackBuilder/multiTrackMerger.lua. Creates procedural meshes at intersection points where multiple track segments meet, filling the gaps with bezier-interpolated surfaces.
Exports
| Key | Signature | Description |
|---|---|---|
mergeMultiTrack | (segments, centerMat?, borderMat?, borderMesh?) → obj | Creates a merged intersection mesh from multiple track endpoints |
setReferences | (list) | Sets references to basicCenters and basicBorders mesh generators |
setMaterials | (intersection, center?, border?) | Updates materials on an existing intersection object |
Internals
- Bezier edge generation:
bezierEdge(a, b, center)creates a cubic bezier curve between two track endpoints, using their orientation vectors as control point tangents. Interpolates bank, width, and pitch along the curve. - Plate mesh generation:
makePlateMesh(leftEdge, rightEdge, center, mat, bottom)creates a triangulated surface between two bezier edges and a center point. Generates both top and bottom faces. - Center mesh:
getCenterMesh(edges, mat)fills the center area of multi-way intersections (3+ segments) with plate meshes. - Point coordinate system: Each bezier point gets nx/ny/nz orientation vectors computed from its final rotation quaternion.
How It Works
mergeMultiTrackreceives a list of segment endpoints (with position, rotation, width, bank data).- Endpoints are sorted by angle around their centroid for correct winding order.
- Bezier edges are computed between consecutive endpoints using
bezierEdge. - For each edge, center and border meshes are generated using the same mesh generators as regular track segments.
- For 3+ way intersections, additional fill meshes close the center gap.
- All meshes are combined into a single
ProceduralMeshobject registered inMissionGroup.
-- Create an intersection between track endpoints
local segments = {
{index = 5, sub = 1, segment = track[5], reverse = false},
{index = 3, sub = 2, segment = track2[3], reverse = true},
}
local obj = merger.mergeMultiTrack(segments, 'track_editor_A_center', 'track_editor_A_border')Additional Exports
M.mergeMultiTrack- (undocumented)M.setMaterials- (undocumented)M.setReferences- (undocumented)
trackBuilder/meshes - Cross-Section Mesh Definitions
Reference for `extensions/util/trackBuilder/meshes.lua`. Defines cross-section profiles (tubes and side walls) used by the track builder's procedural mesh system.
trackBuilder/obstaclePlacer - Track Obstacle Placement
Reference for `extensions/util/trackBuilder/obstaclePlacer.lua`. Places static and procedural obstacles (rocks, ramps, rings, etc.) along track segments.