Adam Lenart
  3D Graphics Pipeline  
  • 3D graphics pipeline that draws 2D lines to represent a 3D viewing space with perspective:
  • Maintains seperate coordinate frame matrices for world, view, and model transformations.
  • View transformation mode supports rotation and translation along each axis, and perspective adjustments for near/far plane distances and FOV (field of view).
  • Model transformation mode supports rotation, translation, and scaling along each axis.
  • 3D line/plane clipping to viewport edges and near/far planes.
  • Supports multiple viewports of any dimension, defined by dragging a rectangular outline with the mouse.
  • Applies world, view, and model transformations to 3D lines, clips them against the near/far planes, transforms them to NDCs (normalized device coordinates), clips them against the viewport edges, and finally maps them to viewport coordinates:
    • Transforms 3D points into NDCs using projection matrices similar to those generated by gluPerspective.
    • Maps NDCs to viewport rectangle similarly to how glViewport would map them.
  • Deferred rendering to allow for depth shading where lines are sorted on their midpoint Z values and rendered from furthest (lightest) to closest (darkest).
  • Renders gnomon (xyz<->rgb axis) with current orientation at origin of each coordinate frame.
  • Uses generic shape data structure with vertex and edge lists to represent:
    • Cubes/boxes and beveled cubes with configurable bevel thickness.
    • Pyramids and prisms.
    • Spheres with configurable levels of detail (slices/stacks).
    • Quake 2 MD2 models (loads only the first frame of animation).