/** * Shared grid mesh + normal utilities for the page-curl models. * * A curl model fills `positions`/`normals` in place each frame; UVs are static grid * coordinates (no texture swimming). All models bend the same (cols+1)×(rows+1) grid. */ export interface PageMesh { readonly cols: number; readonly rows: number; /** ((cols+1)*(rows+1))*2 — static grid UVs (u across width, v down height). */ readonly uvs: Float32Array; /** *3 — deformed positions, updated by the curl model. */ readonly positions: Float32Array; /** *3 — per-vertex normals, updated by the curl model. */ readonly normals: Float32Array; } /** Allocate a (cols+1)×(rows+1) grid mesh with static UVs (positions/normals filled by a curl). */ export declare function createPageMesh(cols: number, rows: number): PageMesh; /** Per-vertex normals from central differences of the deformed grid (front = +z when flat). */ export declare function computeNormals(mesh: PageMesh): void;