Hierarchical and ObjectOriented Graphics Chapter 8 CS 480680
Hierarchical and Object-Oriented Graphics Chapter 8 CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics
n Introduction: - In this chapter we explore multiple approaches to developing and working with models of geometric objects. - We extend the use of transformations from Chapter 4 to include hierarchical relationships among the objects. - The techniques that we develop are appropriate for applications, such as robotics and figure animation, where the dynamic behavior of the objects is characterized by relationships among the parts of the model. CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 2
- The notion of hierarchy is a powerful one and is an integral part of object oriented methodologies. - We extend our hierarchical model of objects to hierarchical models of whole scenes, including cameras, lights, and material properties. - Such models allow us to extend our graphics APIs to more objet-oriented systems and gives us insight in how to use graphics over networks and distributed environments, such as the Web. CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 3
1. Symbols and Instances - Our first concern is how to store a model that may include many sophisticated objects. - There are two immediate issues: • How do we define a complex object • How do we represent a collection of these objects. - We can take a non hierarchical approach to modeling regarding these objects as symbols, and modeling our world as a collection of symbols CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 4
- Symbols are usually represented at a convenient size and orientation. – For example: a cylinder – In Open. GL we have to set up the appropriate transformation from the frame of the symbol to the world coordinate frame to apply it to the model-view matrix before we execute the code for the symbol. CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 5
• For example: the instance transformation – M = TRS – is a concatenation of a translation, a rotation, and a scale – And the Open. GL program often contains this code: • gl. Matrix. Mode(GL_MODELVIEW); • gl. Laod. Identity(); • gl. Translatef(. . . ); • gl. Rotatef(. . . ); • gl. Scalef(. . . ); • glut. Solid. Cylinder(. . . )’ CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 6
- We can also think of such a model in the form of a table • The table shows no relationship among the objects. However, it does contain everything we need to draw the objects. • We could do a lot of things with this data structure, but its flatness limits us. CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 7
2. Hierarchical Models - Suppose we wish to build an automobile that we can animate - We can build it from the chassis, and 4 wheels CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 8
- Two frames of our animation could look like this: • We could calculate how far the wheel moved, and have code that looks like – calculate(speed, distance); – draw_right_front_wheel(speed, dist); – draw_left_front_wheel(speed, dist); – draw_right_rear_wheel(speed, dist); – draw_left_rear_wheel(speed, dist); – draw_chassis(speed, dist); CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 9
• BUT this is the kind of code we do NOT want. . – It is linear, and it shows none of the relationships between the 5 objects. • There are two types of relationships we wish to convey – First, we cannot separate the movement of the car from the movement of the wheels • If the car moves forward, the wheels must turn. – Second, we would like to note that all the wheels are identical and just located and oriented differently. – We typically do this with a graph. • Def: node, edge, root, leaf, . . . CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 10
• Tree Representation: • DAG Representation: CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 11
3. A Robot Arm - Robotics provides many opportunities for developing hierarchical models. • Consider this arm • It consists of 3 parts CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 12
• The mechanism has 3 degrees of freedom, each of which can be described by a joint angle between the components • In our model, each joint angle determines how to position a component with respect to the component to which it is attached – q - rotation of the base – f - rotation of first arm – y - rotation of second arm piece. CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 13
- We could write it as follows: • display() • { • gl. Rotatef(theta, 0. 0, 1. 0, 0. 0); • base(); • gl. Translatef(0. 0, h 1, 0. 0); • gl. Rotatef(phi, 0. 0, 1. 0); • lower_arm(); • gl. Translatef(0. 0, h 2, 0. 0); • gl. Rotatef(0. 0, 1. 0); • upper_arm(); • } CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 14
• Note that we have described the positioning of the arm independently of the details of the individual parts. – We have also put it into a tree structure – This makes it possible to write separate programs to describe the components and animate the robot. – Drawing an object stored in a tree requires performing a tree traversal (you must visit every node) CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 15
4. Tree Traversal n Here we have a box-like representation of a human figure. - We can represent this figure as a tree CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 16
• If we put the matrices with each node we can specify exactly how to draw the robot • The issue is how to traverse the tree. . . – Typically you do a pre-order traversal. – This can be done in two ways: • with code and a stack • recursively (implicit stack) CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 17
n 4. 1 A Stack-Based Traversal - Consider the code necessary to draw the Robot. • This function might be called from the display callback • The Model-View matrix, M, in effect when the function is invoked determines the position of the robot relative to the rest of the scene. CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 18
• The function must manipulate the model-view matrix before each part of the robot is drawn. • In addition to the usual Open. GL functions for rotation, translation, and scaling, the functions gl. Push. Matrix and gl. Pop. Matrix are particularly helpful for traversing our tree. • The first gl. Push. Matrix duplicates the current modelview matrix – assuming that we have done a previous gl. Matrix. Mode(GL_MODELVIEW) – When we have finished with changes we can do a gl. Pop. Matrix to get back the original one saved – Note: we must do another gl. Push. Matrix to leave a copy that we can later go back to. CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 19
• Open. GL also has the functions gl. Push. Attrig and gl. Pop. Attrib that allow us to deal with attributes in a similar manner • Open. GL divides its state into groups, and allows a user to push any set of these groups on th attribute stack. – The user needs only to set the bits in a mask that is the parameter for gl. Push. Attrib – Attribute groups include lighting, so we can push material properties and lights onto the stack. CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 20
5. Use of Tree Data Structures n The second approach is to use a standard tree data structure to represent our hierarchy and then to render it with a traversal algorithm that is independent of the mode of traversal. CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 21
• At each node we must store the information necessary to draw the object: – a function that defines the object – the homogeneous coordinate matrix that positions the object relative to the parent. – Typedef struct treenode{ – Glfloat m[16]; – void (*f)(); – struct treenode *sibling; – struct treenode *child; –} CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 22
• Traversing the tree in a preorder traversal can be accomplished – void traverse (treenode * root) –{ – if(root == NULL) return – gl. Push. Matrix(); – gl. Mult. Matrix(root->m); – root->f(); – if(root->child!= NULL) traverse(root->child); – gl. Pop. Matrix(); – if(root->sibling!= NULL) traverse(root->sibling); –} CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 23
6. Animation - Our robot example is articulated • consists of rigid parts connected by joints - We can make such models change their positions in time - animate them - by altering a small set of parameters. - Hierarchical models allow us to reflect correctly the compound motions incorporating the physical relationships among parts of the model. CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 24
• Of the many approaches to animation, a few basic techniques are of particular importance when we work with articulated figures. – Kinematics • describing the position of the parts of the model based on only their joint angles. – Inverse kinematics and inverse dynamics • given a desired state of the model, how can we adjust the angles so as to achieve this position? – key-frame animation • position the objects at a set of times. – Inbetweening • then fill in (interpolate). CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 25
5. Use of Tree Data Structures CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 26
CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 27
CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 28
6. Animation CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 29
CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 30
7. Graphical Objects CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 31
CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 32
n 7. 1 Methods, Attributes, and Messages CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 33
CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 34
n 7. 2 A Cube Object CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 35
CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 36
n 7. 3 Objects and Hierarchy CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 37
CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 38
n 7. 4 Geometric Objects CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 39
CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 40
8. Scene Graphs CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 41
CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 42
9. Other Tree Structures CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 43
CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 44
n 9. 1 CSG Trees CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 45
CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 46
n 9. 2 BSP Trees CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 47
CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 48
n 9. 3 Quadtrees and Octrees CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 49
CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 50
10. Graphics and the Web CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 51
CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 52
n 10. 1 Networks and Protocols CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 53
CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 54
n 10. 2 Hypermedia and HTML CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 55
CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 56
n 10. 3 Databases and VRML CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 57
CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 58
n 10. 4 JAVA and Applets CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 59
CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 60
11. Summary CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 61
CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 62
12. Suggested Readings CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 63
CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 64
Exercises -- Due next class CS 480/680 Chapter 8 -- Hierarchical and Object-Oriented Graphics 65
- Slides: 65