University of California, Berkeley
EECS Dept, CS Division
Jordan Smith SLIDE: Scene Language for
Interactive Dynamic Environments
Prof. Carlo H. Séquin

Home Goals Publications People Gallery Assignments Distributions

SLIDE Implementation Specification

SLIDE Class Hierarchy

The following is a diagram of the SLIDE C++ class hierarchy. Subclasses point up to their superclasses. Every textual SLIDE language element has a corresponding C++ class which represents its type in the run time viewer program. Notice that most SLIDE types are directly or indirectly a subclass of CSLIDEPrimitive.

Notice that CSLIDEObject, CSLIDEGroup, and CSLIDEInstance all share a common superclass, CSLIDENode. This common CSLIDENode type eases the management of the scene graph DAG.

Notice that CSLIDERotate, CSLIDEScale, and CSLIDETranslate all share a common superclass, CSLIDETransform. This common CSLIDETransform type eases the management of transforms in the CSLIDEInstance class.

The classes which appear in red have had portions of their implementations removed. You need to complete the functionality of these classes.

Matrix

The matrix transformation have been ripped out again and need to be replaced with the 3D versions.

Transformations

The transformations (rotate, scale, translate) need to be fixed to also compute their inverses which is necessary for back face culling. Also note that there is the new CSLIDELookAt transformation which needs to be implemented. This transform is really the combination of a rotation and a translation.

SLIDE Camera

You will only be using the full (Xmin Ymin Zmin) (Xmax Ymax Zmax) to do full parallel projections including oblique view frustums. The camera must compute the mGproj_vrc matrix.

You will have to use the camera path class to compute the mGworld_vrc and mGvrc_world. These transforms are necessary for transforming the world into the camera's local coordinate system where the camera is located at the origin looking down the negative Z-axis.

CBound

The CBound class is where a lot of your work will be done in this assignment. It is responsible for bounding box culling with its Intersect method. It is also responsible for polygon clipping. Now these must be done in 3D.

Outline of Viewer Execution

For more information and diagrams checkout the SLIDE Rendering Pipeline Page. Note: Ignore the rendering pass described there and follow the one described at the bottom of this page instead.

Render

The following graph shows what should be happening for a single face in the rendering process, starting with the HandleDisplay callback on the CWindow object. Note that the matrix notation used in the diagram is ROW VECTOR form, and you will be coding COLUMN VECTORS in the project. The red blocks indicate which portions of the rendering pipeline have changed since the last assignment. These are the ones which you will be creating.

You can also download the postscript version of this graph: render.ps

Suggested Plan of Attack

  1. Fix the Matrix class transformations
  2. Fix CSLIDERotate, CSLIDEScale, CSLIDETranslate, and CSLIDELookAt classes to create the correct transformations and inverses
  3. Fix CSLIDEInstance to correctly append transforms and inverses
  4. Fix CSLIDEPath to create the WORLD->VRC transformation
  5. Fix CSLIDECamera to create the VRC->PROJ transformation
  6. Fix CSLIDEFace to calculate its plane equation, do back face culling when appropriate, and render geometry based on the LOD flag
  7. Fix the CBound class to do 3D bounding box culling and 3D clipping
  8. Implement a crystal ball interface in the CSLIDERender class
  9. Make a cool 3D scene!



This page was originally built by Jordan Smith.

Last modified: Monday, 01-Mar-1999 01:41:20 PST