UNPKG

@woosh/meep-engine

Version:

Pure JavaScript game engine. Fully featured and production ready.

335 lines • 9.15 kB
/** * @readonly * @type {number} */ export const NULL_POINTER: number; /** * A high-performance memory-efficient, binary-backed topological data structure for representing 3D meshes. * Manages interconnected vertices, edges, loops, and faces using contiguous memory pools. */ export class BinaryTopology { /** * structure: * coordinate: float32[3] // vertex coordinates * normal: float32[3] // vertex normal * edge_pointer: uint32 // Pointer to (any) edge using this vertex (for disk cycles) * * @type {BinaryElementPool} * @private */ private __vertex_pool; /** * structure: * v1: uint32 // Vertices (unordered) * v2: uint32 // Vertices (unordered) * l: uint32 // The list of loops around the edge points at a Loop * v1_disk_link: uint32[2] // Disk Cycle Pointers edge around vertex v1 and d2 does the same for v2. * v2_disk_link: uint32[2] // see above * @type {BinaryElementPool} * @private */ private __edge_pool; /** * Loop represents a corner of the face * structure: * v: uint32 // The vertex this loop points to. This vertex must be unique within the cycle * e: uint32 // The edge this loop uses. * f: uint32 // The face this loop is part of. * radial_next: uint32 // Other loops connected to this edge. * radial_prev: uint32 * next: uint32 // Other loops that are part of this face. * prev: uint32 * @type {BinaryElementPool} * @private */ private __loop_pool; /** * structure: * l_first: uint32 // first loop pointer * no: float32[3] // Face normal * @type {BinaryElementPool} * @private */ private __face_pool; /** * Total (approximate) size of this structure in memory, in bytes * @return {number} */ get byteSize(): number; /** * Releases excess memory held by internal pools. * Useful for serialization use cases. */ trim(): void; /** * * @return {BinaryElementPool} */ get vertices(): BinaryElementPool; /** * Edges are shared among faces, edges point to 2 unordered vertices * @return {BinaryElementPool} */ get edges(): BinaryElementPool; /** * Loops are corners of faces, a single vertex can be associated with many loops, one per connected face * @return {BinaryElementPool} */ get loops(): BinaryElementPool; /** * * @returns {BinaryElementPool} */ get faces(): BinaryElementPool; /** * Clear the topology, removed all data */ clear(): void; /** * * @param {number[]|ArrayLike<number>|Float32Array} result * @param {number} result_offset * @param {number} id vertex ID */ vertex_read_coordinate(result: number[] | ArrayLike<number> | Float32Array, result_offset: number, id: number): void; /** * * @param {number} id * @param {number[]|Float32Array} value * @param {number} value_offset */ vertex_write_coordinate(id: number, value: number[] | Float32Array, value_offset: number): void; /** * * @param {number[]|ArrayLike<number>|Float32Array} result * @param {number} result_offset * @param {number} id vertex ID */ vertex_read_normal(result: number[] | ArrayLike<number> | Float32Array, result_offset: number, id: number): void; /** * * @param {number} id * @param {number[]|Float32Array} value * @param {number} value_offset */ vertex_write_normal(id: number, value: number[] | Float32Array, value_offset: number): void; /** * @param {number} id * @returns {number} */ vertex_read_edge(id: number): number; /** * * @param {number} edge_id * @param {number} id */ vertex_write_edge(id: number, edge_id: number): void; /** * @param {number} id edge ID * @returns {number} */ edge_read_vertex1(id: number): number; /** * * @param {number} value * @param {number} id edge ID */ edge_write_vertex1(id: number, value: number): void; /** * @param {number} id edge ID * @returns {number} */ edge_read_vertex2(id: number): number; /** * * @param {number} value * @param {number} id edge ID */ edge_write_vertex2(id: number, value: number): void; /** * @param {number} id edge ID * @returns {number} */ edge_read_loop(id: number): number; /** * * @param {number} loop_id loop ID * @param {number} id edge ID */ edge_write_loop(id: number, loop_id: number): void; /** * @param {number} id edge ID * @returns {number} edge ID */ edge_read_v1_disk_next(id: number): number; /** * * @param {number} value edge ID * @param {number} id edge ID */ edge_write_v1_disk_next(id: number, value: number): void; /** * @param {number} id edge ID * @returns {number} edge ID */ edge_read_v1_disk_prev(id: number): number; /** * * @param {number} value edge ID * @param {number} id edge ID */ edge_write_v1_disk_prev(id: number, value: number): void; /** * @param {number} id edge ID * @returns {number} edge ID */ edge_read_v2_disk_next(id: number): number; /** * * @param {number} value edge ID * @param {number} id edge ID */ edge_write_v2_disk_next(id: number, value: number): void; /** * @param {number} id edge ID * @returns {number} edge ID */ edge_read_v2_disk_prev(id: number): number; /** * * @param {number} value edge ID * @param {number} id edge ID */ edge_write_v2_disk_prev(id: number, value: number): void; loop_create(): number; /** * Put loop into valid initial state, set all pointers to NULL * @param {number} id */ loop_initialize(id: number): void; /** * @param {number} id loop ID * @returns {number} */ loop_read_vertex(id: number): number; /** * * @param {number} value * @param {number} id loop ID */ loop_write_vertex(id: number, value: number): void; /** * * @param {number} id loop ID * @returns {number} */ loop_read_edge(id: number): number; /** * * @param {number} value * @param {number} id loop ID */ loop_write_edge(id: number, value: number): void; /** * * @param {number} id loop ID * @returns {number} */ loop_read_face(id: number): number; /** * * @param {number} value * @param {number} id loop ID */ loop_write_face(id: number, value: number): void; /** * * @param {number} id loop ID * @returns {number} */ loop_read_radial_next(id: number): number; /** * * @param {number} value * @param {number} id loop ID */ loop_write_radial_next(id: number, value: number): void; /** * * @param {number} id loop ID * @returns {number} */ loop_read_radial_prev(id: number): number; /** * * @param {number} value * @param {number} id loop ID */ loop_write_radial_prev(id: number, value: number): void; /** * * @param {number} id loop ID * @returns {number} */ loop_read_next(id: number): number; /** * * @param {number} value * @param {number} id loop ID */ loop_write_next(id: number, value: number): void; /** * * @param {number} id loop ID * @returns {number} */ loop_read_prev(id: number): number; /** * * @param {number} value * @param {number} id loop ID */ loop_write_prev(id: number, value: number): void; /** * * @param {number} id face ID * @returns {number} */ face_read_loop(id: number): number; /** * * @param {number} value * @param {number} id face ID */ face_write_loop(id: number, value: number): void; /** * @param {number[]|ArrayLike<number>|Float32Array} result * @param {number} result_offset * @param {number} id face ID */ face_read_normal(result: number[] | ArrayLike<number> | Float32Array, result_offset: number, id: number): void; /** * @param {number} id face ID * @param {number[]|Float32Array} value * @param {number} value_offset */ face_write_normal(id: number, value: number[] | Float32Array, value_offset: number): void; /** * Copy data from another mesh. * @param {BinaryTopology} other */ copy(other: BinaryTopology): void; /** * * @returns {BinaryTopology} */ clone(): BinaryTopology; /** * Useful for type checking * @readonly * @type {boolean} */ readonly isBinaryTopology: boolean; } import { BinaryElementPool } from "./BinaryElementPool.js"; //# sourceMappingURL=BinaryTopology.d.ts.map