[][src]Module plexus::index

Indexing and aggregation.

This module provides indexers, which disambiguate geometry and produce the minimal set of topological and geometric data. This is primarily used to index streams of $n$-gons (NGon, Trigon, etc.) into raw buffers or polygonal mesh data structures like MeshBuffer.

Indexing produces an index buffer and vertex buffer. The index buffer describes the topology of a mesh by providing ordered groups of indices into the vertex buffer. Each group of indices represents a polygon. The vertex buffer contains geometric data associated with a vertex, such as positions or surface normals. Plexus supports both structured and flat index buffers.

Flat index buffers directly store individual indices, such as Vec<usize>. Because there is no explicit structure, arity must by constant, but arbitrarily sized $n$-gons are trivially supported. Flat index buffers tend to be more useful for rendering pipelines, especially triangular buffers, because rendering pipelines typically expect a simple contiguous buffer of index data. See MeshBuffer3 and Flat.

Structured index buffers contain sub-structures that explicitly group indices, such as Vec<Trigon<usize>>. Structured index buffers typically contain Trigons, Tetragons, or Polygons. Notably, Polygon can describe the topology of a mesh even if its arity is non-constant.

The primary interface of this module is the IndexVertices and CollectWithIndexer traits along with the HashIndexer and LruIndexer types.

Examples

Indexing data for a cube to create raw buffers and a MeshBuffer:

use decorum::N64;
use nalgebra::Point3;
use plexus::buffer::MeshBuffer3;
use plexus::index::{Flat3, HashIndexer};
use plexus::prelude::*;
use plexus::primitive::cube::Cube;
use plexus::primitive::generate::Position;

let (indices, positions) = Cube::new()
    .polygons::<Position<Point3<N64>>>()
    .triangulate()
    .index_vertices::<Flat3, _>(HashIndexer::default());
let buffer = MeshBuffer3::<u32, _>::from_raw_buffers(indices, positions).unwrap();

Structs

Flat

Flat index buffer meta-grouping.

HashIndexer

Hashing vertex indexer.

LruIndexer

LRU caching vertex indexer.

Traits

CollectWithIndexer

Functions for collecting a stream of $n$-gons into a mesh data structure.

FromIndexer
GroupedIndexVertices

Functions for collecting a stream of $n$-gons into raw index and vertex buffers.

Grouping
IndexBuffer

Index buffer.

IndexVertices

Functions for collecting a stream of $n$-gons into raw index and vertex buffers.

Indexer

Vertex indexer.

Push

Type Definitions

Flat3

Alias for a flat and triangular index buffer.

Flat4

Alias for a flat and quadrilateral index buffer.