Project 2

CSE 167: Computer Graphics


Project 2: Make a program that renders an articulated figure, like a hand, with lighting and simple animation, like opening & closing of the fingers. The figure can be rendered as a bunch of boxes. Use hierarchical transformations (such as glPushMatrix() & glPopMatrix()). The code should be structured in an object oriented fashion.


Project 2 is worth 10 points. The breakdown is as follows:


2: Draw something resembling a hand

2: Draw proper hand with hierarchical transforms that can open/close

2: Lighting working with correct triangle normals

2: Good object oriented style with classes for key components (Camera, Hand, Model…)

2: Generic Model class with triangle array (can be unindexed or single indexed)

Object Oriented Approach

Project 2 must have some object oriented structure and have classes for major components such as: Model, Camera and Light at least. If you choose to do a hand, you should have a Hand class and probably some type of Finger as well.


You don’t have to do it exactly like this, but I would suggest something like:


//// Model ////


class Model {


            void Draw();

            void CreateBox(float xsize,float ysize,float zsize);



//// Camera ////


class Camera {

            Vector3 Position;

            Vector3 Target;

            float FOV,Aspect,NearClip,FarClip;


            void DrawBegin();      // Clear screen, set perspective & camera position

            void DrawEnd();         // Calls glSwapBuffers(), etc.



//// Light ////


class Light {

            Vector3 Position;

            Vector3 Color;

            // possibly more stuff…


            void Draw();               // Declares light to GL






//// Finger ////


class Finger {

            Vector3 Position;        // relative to Hand

            float FlexAngle;

            float Length;

            float Width;

            Model Box;                 // can re-use the same model for all 3 joints if you want


            Finger(float length,float width,Vector3 &pos);

            void Draw();

            void SetFlexAngle(float f);



//// Hand ////


class Hand {

            Model Palm;

            Finger Digit[4];

            // Thumb is optional…

            // Might store additional transform info (position, rotation…)


            void Draw();

            void SetFlexAngle(float f);                // Sets all finger’s flex angles