1 / 60

Hierarchical and Object-Oriented Graphics

Explore multiple approaches to developing and working with models of geometric objects, including hierarchical relationships among the objects. Learn how to extend models to whole scenes and use graphics in object-oriented systems and distributed environments.

bkollar
Download Presentation

Hierarchical and Object-Oriented Graphics

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Hierarchical and Object-Oriented Graphics Chapter 8

  2. 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. Chapter 8 -- Hierarchical and Object-Oriented Graphics

  3. 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. Chapter 8 -- Hierarchical and Object-Oriented Graphics

  4. 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 Chapter 8 -- Hierarchical and Object-Oriented Graphics

  5. Symbols are usually represented at a convenient size and orientation. • For example: a cylinder • Figure 8.1 • In OpenGL 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. Chapter 8 -- Hierarchical and Object-Oriented Graphics

  6. For example: the instance transformation • M = TRS • is a concatenation of a translation, a rotation, and a scale • Figure 8.2 • And the OpenGL program often contains this code: • glMatrixMode(GL_MODELVIEW); • glLaodIdentity(); • glTranslatef(...); • glRotatef(...); • glScalef(...); • glutSolidCylinder(...)’ Chapter 8 -- Hierarchical and Object-Oriented Graphics

  7. We can also think of such a model in the form of a table • Figure 8.3 • 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. Chapter 8 -- Hierarchical and Object-Oriented Graphics

  8. 2. Hierarchical Models • Suppose we wish to build an automobile that we can animate • We can build it from the chassis, and 4 wheels • Figure 8.4 Chapter 8 -- Hierarchical and Object-Oriented Graphics

  9. Two frames of our animation could look like this: • Figure 8.5 • 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); Chapter 8 -- Hierarchical and Object-Oriented Graphics

  10. 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, ... Chapter 8 -- Hierarchical and Object-Oriented Graphics

  11. Tree Representation: • Figure 8.6 • DAG Representation: • Figure 8.7 Chapter 8 -- Hierarchical and Object-Oriented Graphics

  12. 3. A Robot Arm • Robotics provides many opportunities for developing hierarchical models. • Consider this arm • Figure 8.8(a) • It consists of 3 parts Chapter 8 -- Hierarchical and Object-Oriented Graphics

  13. 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. Chapter 8 -- Hierarchical and Object-Oriented Graphics

  14. We could write it as follows: • display() • { • glRotatef(theta, 0.0, 1.0, 0.0); • base(); • glTranslatef(0.0, h1, 0.0); • glRotatef(phi, 0.0, 0.0, 1.0); • lower_arm(); • glTranslatef(0.0, h2, 0.0); • glRotatef(0.0, 0.0, 1.0); • upper_arm(); • } Chapter 8 -- Hierarchical and Object-Oriented Graphics

  15. 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 • Figure 8.10 • 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) Chapter 8 -- Hierarchical and Object-Oriented Graphics

  16. 4. Tree Traversal • Here we have a box-like representation of a human figure. • Figure 8.12 • We can represent this figure as a tree • Figure 8.13 Chapter 8 -- Hierarchical and Object-Oriented Graphics

  17. If we put the matrices with each node we can specify exactly how to draw the robot • Figure 8.14 • 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) Chapter 8 -- Hierarchical and Object-Oriented Graphics

  18. 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. • Figure 8.14 Chapter 8 -- Hierarchical and Object-Oriented Graphics

  19. The function must manipulate the model-view matrix before each part of the robot is drawn. • In addition to the usual OpenGL functions for rotation, translation, and scaling, the functions glPushMatrix and glPopMatrix are particularly helpful for traversing our tree. • The first glPushMatrix duplicates the current model-view matrix • assuming that we have done a previous glMatrixMode(GL_MODELVIEW) • When we have finished with changes we can do a glPopMatrix to get back the original one saved • Note: we must do another glPushMatrix to leave a copy that we can later go back to. Chapter 8 -- Hierarchical and Object-Oriented Graphics

  20. OpenGL also has the functions glPushAttrig and glPopAttrib that allow us to deal with attributes in a similar manner • OpenGL 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 glPushAttrib • Attribute groups include lighting, so we can push material properties and lights onto the stack. Chapter 8 -- Hierarchical and Object-Oriented Graphics

  21. 5. Use of Tree Data Structures • 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. Chapter 8 -- Hierarchical and Object-Oriented Graphics

  22. 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; • } Chapter 8 -- Hierarchical and Object-Oriented Graphics

  23. Traversing the tree in a preorder traversal can be accomplished • void traverse (treenode * root) • { • if(root == NULL) return • glPushMatrix(); • glMultMatrix(root->m); • root->f(); • if(root->child!= NULL) traverse(root->child); • glPopMatrix(); • if(root->sibling!= NULL) traverse(root->sibling); • } Chapter 8 -- Hierarchical and Object-Oriented Graphics

  24. 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. Chapter 8 -- Hierarchical and Object-Oriented Graphics

  25. 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). Chapter 8 -- Hierarchical and Object-Oriented Graphics

  26. 7. Graphical Objects Chapter 8 -- Hierarchical and Object-Oriented Graphics

  27. Chapter 8 -- Hierarchical and Object-Oriented Graphics

  28. 7.1 Methods, Attributes, and Messages Chapter 8 -- Hierarchical and Object-Oriented Graphics

  29. Chapter 8 -- Hierarchical and Object-Oriented Graphics

  30. 7.2 A Cube Object Chapter 8 -- Hierarchical and Object-Oriented Graphics

  31. Chapter 8 -- Hierarchical and Object-Oriented Graphics

  32. 7.3 Objects and Hierarchy Chapter 8 -- Hierarchical and Object-Oriented Graphics

  33. Chapter 8 -- Hierarchical and Object-Oriented Graphics

  34. 7.4 Geometric Objects Chapter 8 -- Hierarchical and Object-Oriented Graphics

  35. Chapter 8 -- Hierarchical and Object-Oriented Graphics

  36. 8. Scene Graphs Chapter 8 -- Hierarchical and Object-Oriented Graphics

  37. Chapter 8 -- Hierarchical and Object-Oriented Graphics

  38. 9. Other Tree Structures Chapter 8 -- Hierarchical and Object-Oriented Graphics

  39. Chapter 8 -- Hierarchical and Object-Oriented Graphics

  40. 9.1 CSG Trees Chapter 8 -- Hierarchical and Object-Oriented Graphics

  41. Chapter 8 -- Hierarchical and Object-Oriented Graphics

  42. 9.2 BSP Trees Chapter 8 -- Hierarchical and Object-Oriented Graphics

  43. Chapter 8 -- Hierarchical and Object-Oriented Graphics

  44. 9.3 Quadtrees and Octrees Chapter 8 -- Hierarchical and Object-Oriented Graphics

  45. Chapter 8 -- Hierarchical and Object-Oriented Graphics

  46. 10. Graphics and the Web Chapter 8 -- Hierarchical and Object-Oriented Graphics

  47. Chapter 8 -- Hierarchical and Object-Oriented Graphics

  48. 10.1 Networks and Protocols Chapter 8 -- Hierarchical and Object-Oriented Graphics

  49. Chapter 8 -- Hierarchical and Object-Oriented Graphics

  50. 10.2 Hypermedia and HTML Chapter 8 -- Hierarchical and Object-Oriented Graphics

More Related