1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
//! Careful abstraction of geometric shapes in a ray tracer is a key
//! component of a clean system design, and shapes are the ideal
//! candidate for an object-oriented approach. All geometric
//! primitives implement a common interface, and the rest of the
//! renderer can use this interface without needing any details about
//! the underlying shape. This makes it possible to separate the
//! geometric and the shading subsystem of pbrt.
//!
//! - Cone
//! - Curve
//! - Cylinder
//! - Disk
//! - Hyperboloid
//! - Paraboloid
//! - Sphere
//! - Triangle
//!
//! ## Cones
//!
//! TODO
//!
//! ## Curves
//!
//! TODO
//!
//! ## Spheres
//!
//! Spheres are a special case of a general type of surfaces called
//! quadrics. They are the simplest type of curved surfaces that is
//! useful to a ray tracer and are a good starting point for general
//! ray intersection routines.
//!
//! ## Triangle Meshes
//!
//! While a natural representation would be to have a **Triangle**
//! shape implementation where each triangle stored the positions of
//! its three vertices, a more memory-efficient representation is to
//! separately store entire triangle meshes with an array of vertex
//! positions where each individual triangle just stores three offsets
//! into this array for its three vertices.
//!
//! ## Disks
//!
//! The disk is an interesting quadric since it has a particularly
//! straightforward intersection routine that avoids solving the
//! quadric equation.
//!
//! ## Cylinders
//!
//! Another useful quadric is the cylinder. Cylinder shapes are
//! centered around the z axis.
//!
//! ## Hyperboloids
//!
//! TODO
//!
//! ## Paraboloids
//!
//! TODO
//!
pub mod curve;
pub mod cylinder;
pub mod disk;
pub mod loopsubdiv;
pub mod nurbs;
pub mod plymesh;
pub mod sphere;
pub mod triangle;