CHAPTER 10 - Implementation 1
- Examine the limitations of linear modeling 
    - Symbols and instances
 
- Introduce hierarchical models 
    - Articulated models
- Robots
 
- Introduce Tree and DAG models
Instance Transformation
- Start with a prototype object (a symbol)
- Each appearance of the object in the model is
an instance 
    - Must scale, orient, position
- Defines instance transformation
 

Symbol-Instance Table
- Can store a model by assigning a number to each symbol and storing the parameters for the instance transformation

Relationships in Car Model
- Symbol-instance table does not show relationships between parts of model
- Consider model of car 
    - Chassis + 4 identical wheels
- Two symbols
 

- Rate of forward motion determined by rotational speed of wheels
Structure Through Function Calls
car(speed) {chassis()
wheel(right_front);
wheel(left_front);
wheel(right_rear);
wheel(left_rear); }
- Fails to show relationships well
- Look at problem using a graph
Graphs
- Set of nodes and edges (links)
- Edge connects a pair of nodes 
    - Directed or undirected
 
- Cycle: directed path that is a loop
  
 
Tree
- Graph in which each node (except the root) has
exactly one parent node 
    - May have multiple children
- Leaf or terminal node: no children
 

Tree Model of Car

DAG Model
- If we use the fact that all the wheels are identical, we get a directed acyclic graph
- Not much different than dealing with a tree

Modeling with Trees
- Must decide what information to place in nodes and what to put in edges
- Nodes 
    - What to draw
- Pointers to children
 
- Edges 
    - May have information on incremental changes to transformation matrices (can also store in nodes)
 
Robot Arm

Articulated Models
- Robot arm is an example of an articulated model
    
    - Parts connected at joints
- Can specify state of model by giving all joint angles
 

Relationships in Robot Arm
- Base rotates independently 
    - Single angle determines position
 
- Lower arm attached to base 
    - Its position depends on rotation of base
- Must also translate relative to base and rotate about connecting joint
 
- Upper arm attached to lower arm 
    - Its position depends on both base and lower arm
- Must translate relative to lower arm and rotate about joint connecting to lower arm
 
Required Matrices
- Rotation of base: Rb 
    - Apply M = Rb to base
 
- Translate lower arm relative to base: Tlu
- Rotate lower arm around joint: Rlu 
    - Apply M = Rb Tlu Rlu to lower arm
 
- Translate upper arm relative to upper arm: Tuu
- Rotate upper arm around joint: Ruu 
    - Apply M = Rb Tlu Rlu Tuu Ruu to upper arm
 
OpenGL Code for Robot
robot_arm() {
glRotate(theta, 0.0, 1.0, 0.0);
base();
glTranslate(0.0, h1, 0.0);
glRotate(phi, 0.0, 1.0, 0.0);
lower_arm();
glTranslate(0.0, h2, 0.0);
glRotate(psi, 0.0, 1.0, 0.0);
upper_arm(); }
Tree Model of Robot
- Note code shows relationships between parts of
model 
    - Can change “look” of parts easily without altering relationships
 
- Simple example of tree model
- Want a general node structure for nodes  
Possible Node Structure

Generalizations
- Need to deal with multiple children 
    - How do we represent a more general tree?
- How do we traverse such a data structure?
 
- Animation 
    - How to use dynamically?
- Can we create and delete nodes during execution?
 

