Module plexus::generate [] [src]

Mesh generation from primitives like cubes and spheres.

This module provides unit primitives that can be used to form complex iterator expressions to generate meshes via a stream of topology and geometry. This data can be collected into simple buffers for rendering or a graph (half-edge) for further manipulation.

Iterator expressions begin with a unit primitive and manipulate its components like vertices, lines, and polygons. Generation and decomposition operations are exposed via traits.

Examples

Generating position and index buffers for a scaled sphere:

use nalgebra::Point3;
use plexus::generate::sphere::UVSphere;
use plexus::prelude::*;

let sphere = UVSphere::<f32>::with_unit_radius(16, 16);
let positions: Vec<_> = sphere
    .vertices_with_position() // Generate the unique set of positional vertices.
    .map(|position| -> Point3<_> { position.into() }) // Convert into a nalgebra type.
    .map(|position| position * 10.0) // Scale the positions by 10.
    .collect();
let indeces: Vec<_> = sphere
    .polygons_with_index() // Generate polygons indexing the unique set of vertices.
    .triangulate() // Decompose the polygons into triangles.
    .vertices() // Decompose the triangles into vertices (indeces).
    .collect();

Generating position and index buffers using an indexer:

use plexus::generate::LruIndexer;
use plexus::generate::cube::Cube;
use plexus::prelude::*;

let (indeces, positions) = Cube::<f32>::with_unit_width()
    .polygons_with_position()
    .triangulate()
    .index_vertices(LruIndexer::default());

Modules

cube
sphere

Structs

HashIndexer
Line
LruIndexer
Quad
Triangle

Enums

Polygon

Traits

CollectWithIndexer
IndexVertices
Lines
MapVertices
PolygonGenerator
Polygonal
PolygonsWithIndex
PolygonsWithPosition
PolygonsWithTexture
Rotate
Subdivide
Tetrahedrons
Topological
Triangulate
VertexGenerator
Vertices
VerticesWithPosition