Expand description

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

Modules