70
1 Hierarchical and Object-Oriented Graphics Construct complex models from a set of simple geometric objects Extend the use of transformations to include hierarchical relationships Useful for characterizing relationships among model parts in applications such as robotics and figure animations.

Hierarchical and Object-Oriented Graphics

Embed Size (px)

DESCRIPTION

Hierarchical and Object-Oriented Graphics. Construct complex models from a set of simple geometric objects Extend the use of transformations to include hierarchical relationships Useful for characterizing relationships among model parts in applications such as robotics and figure animations. - PowerPoint PPT Presentation

Citation preview

Page 1: Hierarchical and Object-Oriented Graphics

1

Hierarchical and Object-Oriented Graphics

• Construct complex models from a set of simple geometric objects

• Extend the use of transformations to include hierarchical relationships

• Useful for characterizing relationships among model parts in applications such as robotics and figure animations.

Page 2: Hierarchical and Object-Oriented Graphics

2

Symbols and Instances

• A non-hierarchical approach which models our world as a collection of symbols.

• Symbols can include geometric objects, fonts and other application-dependent graphical objects.

• Use the following instance transformation to place instances of each symbol in the model.

• The transformation specify the desired size, orientation and location of the symbol.

TRSM

Page 3: Hierarchical and Object-Oriented Graphics

3

Example

Page 4: Hierarchical and Object-Oriented Graphics

4

Hierarchical Models

• Relationships among model parts can be represented by a graph.

• A graph consists of :- A set of nodes or vertices.- A set of edges which connect pairs of nodes.

• A directed graph is a graph where each of its edges has a direction associated with it.

Page 5: Hierarchical and Object-Oriented Graphics

5

Trees and DAG: Trees

• A tree is a directed graph without closed paths or loops.

• Each tree has a single root node with outgoing edges only.

• Each non-root node has a parent node from which an edge enters.

• Each node has one or more child nodes to which edges are connected.

• A node without children is called a terminal node or leaf.

Page 6: Hierarchical and Object-Oriented Graphics

6

Trees and DAGS: Trees

root node

node

edge

leaf

Page 7: Hierarchical and Object-Oriented Graphics

7

Example

Page 8: Hierarchical and Object-Oriented Graphics

8

Trees and DAG: DAG

• Storing the same information in different nodes is inefficient.

• Use a single prototype for multiple instances of an object and replace the tree structure by the directed acyclic graph (DAG).

• Both trees and DAG are hierarchical methods of expressing relationships.

Page 9: Hierarchical and Object-Oriented Graphics

9

Example: A Robot Arm• The robot arm is modeled using three simple objects.

• The arm has 3 degrees of freedom represented by the 3 joint angles between components.

• Each joint angle determines how to position a component with respect to the others.

Page 10: Hierarchical and Object-Oriented Graphics

10

Robot Arm: Base

• The base of the robot arm can rotate about the y axis by the angle .

• The motion of any point p on the base can be described by applying the rotation matrix )(yR

Page 11: Hierarchical and Object-Oriented Graphics

11

Robot Arm: Lower Arm

• The lower arm is rotated about the z-axis by an angle , which is represented by

• It is then shifted to the top of the base by a distance , which is represented by .

• If the base has rotated, we must also rotate the lower arm using .

• The overall transformation is .

)(zR

1h)0,,0( 1hT

)(yR

)()0,,0()( 1 zy h RTR

Page 12: Hierarchical and Object-Oriented Graphics

12

Robot Arm: Upper Arm

• The upper arm is rotated about the z-axis by the angle , represented by the matrix .

• It is then translated by a matrix relative to the lower arm.

• The previous transformation is then applied to position the upper arm relative to the world frame.

• The overall transformation is

)(zR

)0,,0( 2hT

)()0,,0()()0,,0()( 21 zzy hh RTRTR

Page 13: Hierarchical and Object-Oriented Graphics

13

OpenGL Display Program

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(psi, 0.0, 0.0, 1.0);upper_arm();

}

Page 14: Hierarchical and Object-Oriented Graphics

14

Tree Representation

• The robot arm can be described by a tree data structure.

• The nodes represent the individual parts of the arm.

• The edges represent the relationships between the individual parts.

Page 15: Hierarchical and Object-Oriented Graphics

15

Information Stored in Tree Node

• A pointer to a function that draws the object.

• A homogeneous coordinate matrix that positions, scales and orients this node relative to its parent.

• Pointers to children of the node.

• Attributes (color, fill pattern, material properties) that applies to the node.

Page 16: Hierarchical and Object-Oriented Graphics

16

Trees and Traversal

• Perform a tree traversal to draw the represented figure.

• Two possible approaches- Depth-first- Breadth-first

• Two ways to implement the traversal function- Stack-based approach- Recursive approach

Page 17: Hierarchical and Object-Oriented Graphics

17

Example: A Robot Figure

• The torso is represented by the root node.

• Each individual part, represented by a tree node, is positioned relative to the torso by appropriate transformation matrices.

• The tree edges are labeled using these matrices.

Page 18: Hierarchical and Object-Oriented Graphics

18

Stack-Based Traversal

• The torso is drawn with the initial model-view matrix

• Trace the leftmost branch to the head node- Update the model-view matrix to - Draw the head

• Back up to the torso node.

• Trace the next branch of the tree.- Draw the left-upper arm with matrix- Draw the left-lower arm with matrix

• Draw the other parts in a similar way.

M

hMM

luaMM

llaluaMMM

Page 19: Hierarchical and Object-Oriented Graphics

19

OpenGL Implementation: Head

Figure()

{

glPushMatrix();

torso();

glTranslate

glRotate3

head();

glPopMatrix();

Page 20: Hierarchical and Object-Oriented Graphics

20

OpenGL Implementation: Left Arm

glPushMatrix();

glTranslate

glRotate3

Left_upper_arm();

glTranslate

glRotate3

Left_lower_arm();

glPopMatrix();

}

Page 21: Hierarchical and Object-Oriented Graphics

21

Push and Pop Operations

• glPushMatrix puts a copy of the current model-view matrix on the top of the model-view-matrix stack.

• glTranslate and glRotate together construct a transformation matrix to be concatenated with the initial model-view matrix.

• glPopMatrix recovers the original model-view matrix.

• glPushAttrib and glPopAttrib store and retrieve primitive attributes in a similar way as model-view matrices.

Page 22: Hierarchical and Object-Oriented Graphics

22

Recursive Approach

• Use a left-child right-sibling structure.

• All elements at the same level are linked left to right.

• The children are arranged as a second list from the leftmost child to the rightmost.

root

Page 23: Hierarchical and Object-Oriented Graphics

23

Example

Page 24: Hierarchical and Object-Oriented Graphics

24

FirstChild pointer: arrow that points downward

NextSibling pointer: arrow that goes left to right

Page 25: Hierarchical and Object-Oriented Graphics

25

Data Structure for Node

Typedef struct treenode

{

GLFloat m[16];

void (*f)();

struct treenode *sibling;

struct treenode *child;

} treenode;

Page 26: Hierarchical and Object-Oriented Graphics

26

Description of Data Structure Elements

• m is used to store a 4x4 homogeneous coordinate matrix by columns.

• f is a pointer to the drawing function.

• sibling is a pointer to the sibling node on the right.

• child is a pointer to the leftmost child.

Page 27: Hierarchical and Object-Oriented Graphics

27

OpenGL Code: Torso Node Initialization

glLoadIdentity();

glRotatef(theta[0], 0.0, 1.0, 0.0);

glGetFloatv(GL_MODELVIEW_MATRIX,torso_node.m);

Torso_node.f=torso;

Torso_node.sibling=NULL;

Torso_node.child= &head_node;

Page 28: Hierarchical and Object-Oriented Graphics

28

OpenGL Code: Upper Left Arm Node Initialization

glLoadIdentity();

glTranslatef(-(TORSO_RADIUS+UPPER_ARM_RADIUS),

0.9*TORSO_HEIGHT, 0.0);

glRotatef(theta[3], 1.0, 0.0, 0.0);

glGetFloatv(GL_MODELVIEW_MATRIX, lua_node.m);

Lua_node.f=left_upper_arm;

Lua_node.sibling= &rua_node;

Lua_node.child= &lla_node;

Page 29: Hierarchical and Object-Oriented Graphics

29

OpenGL Code: Tree Traversal

Void traverse (treenode *root)

{

if (root==NULL) return;

glPushMatrix();

glMultMatrixf(root->m);

root->f();

if (root->child!=NULL) traverse(root->child);

glPopMatrix();

if (root->sibling!=NULL) traverse(root->sibling);

}

Page 30: Hierarchical and Object-Oriented Graphics

30

Animation

• Objective: to model a pair of walking legs.

Page 31: Hierarchical and Object-Oriented Graphics

31

Animation: Walking Legs

• Rotation of the base will cause rotation of all the other parts.

• Rotation of other parts will only affect themselves and those lower parts attached to them.

Page 32: Hierarchical and Object-Oriented Graphics

32

Definition of Body Metrics

• The relative body metrics are defined in the file model.h.

• The main parts include the base and the two legs.

#define TORSO_HEIGHT 0.8

#define TORSO_WIDTH TORSO_HEIGHT*0.75

#define TORSO_DEPTH TORSO_WIDTH/3.0

#define BASE_HEIGHT TORSO_HEIGHT/4.0

#define BASE_WIDTH TORSO_WIDTH

#define BASE_DEPTH TORSO_DEPTH

Page 33: Hierarchical and Object-Oriented Graphics

33

Drawing the Base

void Draw_Base(void)

{

glPushMatrix() ;

glScalef(BASE_WIDTH,BASE_HEIGHT, BASE_DEPTH);

glColor3f(0.0,1.0,1.0) ;

glutWireCube(1.0) ;

glPopMatrix() ;

}

Page 34: Hierarchical and Object-Oriented Graphics

34

Drawing the Upper Leg

void Draw_Upper_Leg(void)

{

glPushMatrix() ;

glScalef(UP_LEG_JOINT_SIZE,UP_LEG_JOINT_SIZE,UP_LEG_JOINT_SIZE);

glColor3f(0.0,1.0,0.0) ;

glutWireSphere(1.0,8,8) ;

glPopMatrix() ;

glColor3f(0.0,0.0,1.0) ;

glTranslatef(0.0,- UP_LEG_HEIGHT * 0.75, 0.0) ;

glPushMatrix() ;

glScalef(UP_LEG_WIDTH,UP_LEG_HEIGHT,UP_LEG_WIDTH) ;

glutWireCube(1.0) ;

glPopMatrix() ;

}

Page 35: Hierarchical and Object-Oriented Graphics

35

Drawing the Whole Leg

void Draw_Leg(int side)

{

glPushMatrix() ;

glRotatef(walking_angles[side][3],1.0,0.0,0.0) ;

Draw_Upper_Leg() ;

glTranslatef(0.0,- UP_LEG_HEIGHT * 0.75,0.0) ;

glRotatef(walking_angles[side][4],1.0,0.0,0.0) ;

Draw_Lower_Leg() ;

glTranslatef(0.0,- LO_LEG_HEIGHT * 0.625, 0.0) ;

glRotatef(walking_angles[side][5],1.0,0.0,0.0) ;

Draw_Foot() ;

glPopMatrix() ;

}

Page 36: Hierarchical and Object-Oriented Graphics

36

Drawing the Complete Model

void Draw_Base_Legs(void)

{

glPushMatrix() ;

glTranslatef(0.0,base_move,0.0) ;

Draw_Base() ;

glTranslatef(0.0,-(BASE_HEIGHT),0.0) ;

glPushMatrix() ;

glTranslatef(TORSO_WIDTH * 0.33,0.0,0.0) ;

Draw_Leg(LEFT) ;

glPopMatrix() ;

glTranslatef(-TORSO_WIDTH * 0.33,0.0,0.0) ;

Draw_Leg(RIGHT) ;

glPopMatrix() ;

}

Page 37: Hierarchical and Object-Oriented Graphics

37

Modeling the Walking Motion

cosYverticallower_leg_

cosXverticalupper_leg_

vertical)lower_leg__vertical(upper_leg-LLntDisplaceme

Page 38: Hierarchical and Object-Oriented Graphics

38

Codes for Calculating Vertical Displacement

double find_base_move(double langle_up, double langle_lo, double rangle_up, double rangle_lo)

{

double result1, result2, first_result, second_result, radians_up, radians_lo;

radians_up = (PI*langle_up)/180.0 ;

radians_lo = PI*(langle_lo-langle_up)/180.0 ;

result1 = (UP_LEG_HEIGHT + 2*UP_LEG_JOINT_SIZE) * cos(radians_up);

result2 = (LO_LEG_HEIGHT+2*(LO_LEG_JOINT_SIZE+FOOT_JOINT_SIZE)

+FOOT_HEIGHT)* cos(radians_lo) ;

first_result = LEG_HEIGHT - (result1 + result2) ;

Page 39: Hierarchical and Object-Oriented Graphics

39

Codes for Calculating Vertical Displacement

radians_up = (PI*rangle_up)/180.0 ;

radians_lo = PI*(rangle_lo-rangle_up)/180.0 ;

result1 = (UP_LEG_HEIGHT + 2*UP_LEG_JOINT_SIZE) * cos(radians_up) ;

result2 = (LO_LEG_HEIGHT +2*(LO_LEG_JOINT_SIZE+FOOT_JOINT_SIZE)

+FOOT_HEIGHT)* cos(radians_lo) ;

second_result = LEG_HEIGHT - (result1 + result2) ;

if (first_result <= second_result)

return (- first_result) ;

else

return (- second_result) ;

}

Page 40: Hierarchical and Object-Oriented Graphics

40

Key-Frame Animation

• The more critical motions of the object is shown in a number of key frames.

• The remaining frames are filled in by interpolation (the inbetweening process)

• In the current example, inbetweening is automated by interpolating the joint angles between key frames.

Page 41: Hierarchical and Object-Oriented Graphics

41

Interpolation Between Key Frames

• Let the set of joint angles in key frame A and key frame B be

and respectively.

• If there are M frames between key frame A and B, let

• The set of joint angles in the m-th in-between frame is assigned as

),,,( 21 ANAA ),,,( 21 BNBB

MAnBn

n

),,,( 2211 NANAA mmm

Page 42: Hierarchical and Object-Oriented Graphics

42

Implementation of Key-Frame Animation switch (flag)

{

case 1 :

l_upleg_dif = 15 ;r_upleg_dif = 5 ;

l_loleg_dif = 15 ;r_loleg_dif = 5 ;

l_upleg_add = l_upleg_dif / FRAMES ;

r_upleg_add = r_upleg_dif / FRAMES ;

l_loleg_add = l_loleg_dif / FRAMES ;

r_loleg_add = r_loleg_dif / FRAMES ;

walking_angles[0][3] += l_upleg_add ;

walking_angles[1][3] += r_upleg_add ;

walking_angles[0][4] += l_loleg_add ;

walking_angles[1][4] += r_loleg_add ;

Page 43: Hierarchical and Object-Oriented Graphics

43

Implementation of Key-Frame Animation

base_move =find_base_move(walking_angles[0][3],

walking_angles[0][4], walking_angles[1][3],

walking_angles[1][4] ) ;

frames-- ;

if (frames == 0)

{ flag = 2 ; frames = FRAMES ;}

break ;

case 2:

Page 44: Hierarchical and Object-Oriented Graphics

44

Snapshots of Walking Sequence

Page 45: Hierarchical and Object-Oriented Graphics

45

Object-Oriented Approach

• Adopt an object-oriented approach to define graphical objects.

• In an object-oriented programming language, objects are defined as modules with which we build programs

• Each module includes- The data that define the properties of the module

(attributes).- The functions that manipulate these attributes

(methods).

• Messages are sent to objects to invoke a method.

Page 46: Hierarchical and Object-Oriented Graphics

46

A Cube Object

• Non object-oriented implementation

• Need external function to manipulate the variables in the data structure.

Typedef struct cube

{

float color[3];

float matrix[4][4];

}cube;

Page 47: Hierarchical and Object-Oriented Graphics

47

A Cube Object

• Object-oriented implementation

Class cube

{

float color[3];

float matrix[4][4];

public:

void render();

void translate (float x, float y, float z);

void rotate(float theta, float axis_x, floataxis_y, float axis_z);

}

Page 48: Hierarchical and Object-Oriented Graphics

48

A Cube Object

• The application code assumes that a cube instance “knows” how to perform action on itself.

Cube a;

a.rotate(45.0, 1.0, 0.0, 0.0);

a.translate (1.0, 2.0, 3.0);

a.render();

Page 49: Hierarchical and Object-Oriented Graphics

49

Other Examples: a Material Object

• Definition of the material class

• Creating an instance of the material class

Class material

{

float specular[3];

float shininess;

float diffuse[3];

float ambient[3];

}

Cube a;

Material b;

a.setMaterial(b);

Page 50: Hierarchical and Object-Oriented Graphics

50

Other examples: a light source object

• Definition of the light source class

Class light

{

boolean type;

boolean near;

float position[3];

float orientation[3];

float specular[3];

float diffuse[3];

float ambient[3];

}

Page 51: Hierarchical and Object-Oriented Graphics

51

Solid Modeling

How would you interpret the above object?

Page 52: Hierarchical and Object-Oriented Graphics

52

Solids

• Definition- A model which has a well-defined inside and

outside- For each point, we can determine whether the

point is inside, outside, or on the solid

• Purpose- Model more complicated shapes- Mass properties calculations

= Volume and Moment of Insertia- CAD/CAM manufacturing

Page 53: Hierarchical and Object-Oriented Graphics

53

Representations

• Constructive Solid Geometry (CSG)

• Spatial Partitioning representation- Cell Decomposition- Spatial-occupancy Enumeration- Quadtrees and Octrees- Binary Space Partitioning (BSP)

Page 54: Hierarchical and Object-Oriented Graphics

54

Constructive Solid Geometry (CSG ) Trees (1)

Data Structure = Binary tree• Nodes= Boolean Operations

- Union, Intersection, Difference• Nodes = Transformation

- To position and scale objects• Leaves = Primitives

- Blocks and wedges- Quadrics – spheres, cylinders, cones, paraboloids- Deformed solids

Page 55: Hierarchical and Object-Oriented Graphics

55

CSG Trees (2)

• Constructive solid geometry (CSG) operates on a set of solid geometric entities instead of surface primitives.

• Uses three operations: union, intersection, and set difference:- AB consists of all points in either A or B.- AB consists of all points in both A and B.- A-B consists of all points in A which are not in B.

Page 56: Hierarchical and Object-Oriented Graphics

56

CSG Trees (3)

Page 57: Hierarchical and Object-Oriented Graphics

57

CSG Trees (3)

• The algebraic expressions are stored and parsed using expression trees.- Internal nodes store operations.- Terminal nodes store operands.

• The CSG tree is evaluated by a post-order traversal.

Page 58: Hierarchical and Object-Oriented Graphics

58

CSG Trees (4)

- Example

Extracted from Foley et al.’s book

Page 59: Hierarchical and Object-Oriented Graphics

59

CSG Trees (5)- Example

CSG does not provide unique representation

Extracted from Foley et al.’s book

Page 60: Hierarchical and Object-Oriented Graphics

60

Spatial Partitioning Representation (SPR) – Cell Decomposition• Each cell-decomposition system defines a set of primitives

cells that are typically parameterized• “Gluing” them together

Extracted from Foley et al.’s book

Page 61: Hierarchical and Object-Oriented Graphics

61

SPR – Spatial-Occupancy Enumeration

• Special case of cell decomposition• Decomposed into identical cells arranged in a fixed, regular

grid

Extracted from Foley et al.’s book

Page 62: Hierarchical and Object-Oriented Graphics

62

SPR – Quadtrees and Octrees (2)

• A hierarchical variant of spatial-occupancy enumeration• Designed to address approach’s demanding storage

requirements• Use separating planes and lines parallel to the coordinate

axes.• For a quadtree, each parent node has four child nodes.• For an octree (derived from quadtrees), each parent node has

eight child nodes.

Extracted from Foley et al.’s book

Page 63: Hierarchical and Object-Oriented Graphics

63

SPR – Quadtrees and Octrees (3)

• Successive subdivision can be represented as a tree with partially full quadrants (P), full (F) and empty (E)

• No standard for assigning quadrant numbers (0-3)

Extracted from Foley et al.’s book

Page 64: Hierarchical and Object-Oriented Graphics

64

SPR – Quadtrees and Octrees (4)

• Octree is similar to the quandtree, except that its three dimensionals are recursively subdivided into octant.

Extracted from Foley et al.’s book

Page 65: Hierarchical and Object-Oriented Graphics

65

SPR – Quadtrees and Octrees (5)• Boolean set operations

Extracted from Foley et al.’s book

S T

TS TS

Page 66: Hierarchical and Object-Oriented Graphics

66

SPR – Binary Space-Partitioning (BSP) Trees (1)

• Recursively divide space into a pairs of subspaces, each separated by a plane of arbitrary orientation and position.

• Originally, used in determining visible surface in graphics

View point

Page 67: Hierarchical and Object-Oriented Graphics

67

SPR – Binary Space-Partitioning (BSP) Trees (2)• Rendering of a set of polygons using binary spatial-partition tree (BSP tree)

• Plane A separates polygons into two groups- B,C in front of A- D,E and F behind A.

• In the BSP tree- A is at the root.- B and C are in the left subtree.- D, E and F are in the right subtree.

Page 68: Hierarchical and Object-Oriented Graphics

68

SPR – Binary Space-Partitioning (BSP) Trees (3)

• Proceeding recursively- B is in front of C- D separates E and F

• In the 2 BSP sub-trees- B is the left child of C- E and F are the left and right of D respectively

Page 69: Hierarchical and Object-Oriented Graphics

69

SPR – Binary Space-Partitioning (BSP) Trees (4)

• Later to represent arbitrary polyhedra.• Each internal node is associated with a plane and has two

child pointers – one for each side • If the half-space on a side of the plane is subdivided further,

its child is the root of a subtree• If the half-space is homogenous, its child is a leaf,

representing a region either entirely inside or entirely outside, labeled as “in” or “out”

Page 70: Hierarchical and Object-Oriented Graphics

70

Comparison of Representations

• Accuracy- Spatial-partitioning – only an approximation- CSG – high

• Uniqueness- Octree and spatial-occupancy-enumeration – unique- CSG – not