/** * Mesh format compatible with deck.gl SimpleMeshLayer. * All geometries are Z-up (deck.gl convention), unit scale (0..1 in Z = bottom to top). */ export type TreeMesh = { attributes: { POSITION: { value: Float32Array; size: 3; }; NORMAL: { value: Float32Array; size: 3; }; }; indices: { value: Uint32Array; size: 1; }; topology: 'triangle-list'; mode: 4; }; /** * Unit trunk cylinder mesh: from z=0 (base) to z=1 (top), radius tapers from 1 to 0.7. * Scale via `getScale = [trunkRadius, trunkRadius, trunkHeight]`. */ export declare function createTrunkMesh(segments?: number): TreeMesh; /** * Unit palm trunk mesh with a slender taper and raised leaf-scar rings. * Extends from z=0 (base) to z=1 (top). * * The shared trunk accessor still controls the overall radius and height. The * extra geometry is generated once and instanced for every palm. */ export declare function createDatePalmTrunkMesh(segments?: number, scarRings?: number): TreeMesh; /** * Unit pine canopy mesh: multiple tiered cones creating a Christmas tree silhouette. * Extends from z=0 (base of canopy) to z=1 (tip). * * @param levels - number of cone tiers (1-5) * @param segments - polygon segments per cone */ export declare function createPineCanopyMesh(levels?: number, segments?: number): TreeMesh; /** * Unit oak canopy mesh: high-segment sphere, smooth pole, no shading stripe. * * IcosahedronGeometry (detail ≥ 1) always creates a single vertex at the * sphere's north pole via subdivision (normalized midpoint of the top edge), * giving 5 triangles meeting at the apex — the visible spike. Rotating the * icosahedron only moves WHICH original vertex becomes the apex; all 12 base * vertices are 5-connected, so the artifact persists. * * SphereGeometry(24, 16) places 24 tiny triangles at the pole instead of 5, * which is invisible at normal viewing distances. The earlier "shading stripe" * with the low-poly sphere (12 × 8 = 22.5° bands) was coarse Gouraud banding, * not a UV-seam issue. At 24 × 16 (7.5° bands) the shading is smooth. * Extends z = 0 (base) to z = 1 (top). */ export declare function createOakCanopyMesh(): TreeMesh; /** * Unit palm crown with radial, arching fronds and paired pinnate leaflets. * Extends approximately one unit in XY and from z=0.1 to z=1. * * Fronds are intentionally modeled as real mesh ribbons instead of a solid * canopy blob. This preserves the characteristic feathered silhouette from * both aerial and pitched map views while remaining one shared instanced mesh. */ export declare function createPalmCanopyMesh(): TreeMesh; /** * Unit birch canopy mesh: a narrow oval / diamond shape. * Extends from z=0 to z=1, narrower than an oak. */ export declare function createBirchCanopyMesh(): TreeMesh; /** * Unit cherry canopy mesh: a full, round sphere slightly larger than oak. * Extends from z=0 to z=1.1 (slightly wider than tall for a lush look). */ export declare function createCherryCanopyMesh(): TreeMesh; /** * Unit crop sphere mesh for rendering individual fruits, nuts, or flowers. * Deliberately low-polygon (24 triangles) so hundreds of instances remain cheap. * Scale uniformly via getScale = [r, r, r] to set the world-space radius in metres. */ export declare function createCropMesh(): TreeMesh; //# sourceMappingURL=tree-geometry.d.ts.map