csce 441: computer graphics: hierarchical models
DESCRIPTION
CSCE 441: Computer Graphics: Hierarchical Models. Jinxiang Chai. Summary: 3D Geometry Pipeline. Object space. World space. View space. Normalized project space. Image space. 2. Complex Models. Outline. Hierarchical Models - PowerPoint PPT PresentationTRANSCRIPT
CSCE 441: Computer Graphics:Hierarchical Models
Jinxiang Chai
Image space
2
Normalized project
space
View spaceWorld spaceObject space
Summary: 3D Geometry Pipeline
Complex Models
Outline
Hierarchical Models
Reading: HB 9-8&9-9, HB chapter 11, OpenGL Programming Guide, chapter 3, and course slides
• Most graphics API supports a few primitives: - sphere - cube - cylinders
• These symbols are instanced using instance/model transformation:
Symbols and Instances
• Most graphics API supports a few primitives: - sphere - cube - cylinders
• These symbols are instanced using instance transformation:
Symbols and Instances
What’s the matrix for the instance transformation above?
• Most graphics API supports a few primitives: - sphere - cube - cylinders
• These symbols are instanced using instance transformation:
Symbols and Instances
),(*)(*),( yxyx ssSRttTM
• In opengl, instance/model transformation is created by modifying the Model-view matrix:
Sample Instance Trans.
glMatrixMode(GL_MODELVIEW);glLoadIdentity(…);// set current matrix to the identityglTranslate(…); // translate glRotate(…); //rotateglScale(…);//scalehouse();
),(*)(*),(* yxyx ssSRttTI
• In opengl, instance transformation is created by modifying the Model-view matrix:
Sample Instance Trans.
Does the transform seem to be backward?
glMatrixMode(GL_MODELVIEW);glLoadIdentity(…);glTranslate(…);glRotate(…);glScale(…);house();
• Opengl postmultiplies transformation matrices as they are called
• Each subsequent transformation call concatenates the designated transformation matrix on the right of the composite matrix
• We must invoke the transformation in the opposite order from which they are applied.
Composite Transformation: Opengl Implementation
glMatrixMode(GL_MODELVIEW);glLoadIdentity(…);M4;M3;M2;M1;…
xMMMMIx *****' 1234
Lamp
• What’s the current coordinate A ?
1
2
3
3c
2c
1c
A
03221100 )()0,()()0,()(),0()(),( pRlTRlTRlTRyxTp
),,( 0yx0c
11
Lamp
• Suppose we know how to draw each bone in local reference frames
A
Lamp
• How can we draw the character under a particular pose
A
Lamp
• What’s the current coordinate A ?
1
2
3
3c
2c
1c
A
03221100 )()0,()()0,()(),0()(),( pRlTRlTRlTRyxTp
),,( 0yx0c
14
Lamp
• What’s the current coordinate A ?
1
2
3
3c
2c
1c
A
03221100 )()0,()()0,()(),0()(),( pRlTRlTRlTRyxTp
),,( 0yx0c
15
Lamp
• What’s the current coordinate A ?
1
2
3
3c
2c
1c
A
03221100 )()0,()()0,()(),0()(),( pRlTRlTRlTRyxTp
),,( 0yx0c
16
Lamp
• What’s the current coordinate A ?
1
2
3
3c
2c
1c
A
03221100 )()0,()()0,()(),0()(),( pRlTRlTRlTRyxTp
),,( 0yx0c
17
Lamp Implementation• The lamp can be displayed by computing a global matrix
and computing it at each step
)(),( 0RyxT
)(),0()(),( 100 RlTRyxT
)0,()()0,()(),0()(),( 221100 lTRlTRlTRyxT
lamp()
{
M_model =
base();
M_model =
upper_arm();
M_model =
middel_arm();
M_model =
lower_arm();}
)()0,()()0,()(),0()(),( 3221100 RlTRlTRlTRyxT
Matrix M_model;
Main()
{ …
M_model=Identity()
lamp();
}
Lamp Implementation• The lamp can be displayed by computing a global matrix
and computing it at each step
)(),( 0RyxT
)(),0()(),( 100 RlTRyxT
)()0,()(),0()(),( 21100 RlTRlTRyxT
lamp()
{
M_model =
base();
M_model =
upper_arm();
M_model =
middel_arm();
M_model =
lower_arm();}
)()0,()()0,()(),0()(),( 3221100 RlTRlTRlTRyxT
Can we make it more efficiently?
Matrix M_model;
Main()
{ …
M_model=Identity()
lamp();
}
Better Implementation• Instead of recalculating the global matrix each time, we
can just update it in place
)(),( 0RyxT
)(),0( 10 RlT
)()0,( 21 RlT
Matrix M_model;
Main()
{ …
M_model=Identity()
lamp();
}
lamp()
{
M_model *=
base();
M_model *=
upper_arm();
M_model *=
middel_arm();
M_model *=
lower_arm();}
)()0,( 32 RlT
Opengl Implementation• Opengl maintains a global state matrix called model-view
matrix
2D_lamp(x, y, θ0, θ1, θ2, θ3){ glTranslatef(x,y,0) glRotatef(θ0,0,0,1,); base(); glTranslatef(0,l0,0) glRotatef(θ1,0,0,1,); upper_arm(); glTranslatef(0,l1,0) glRotatef(θ2,0,0,1,); middel_arm(); glTranslatef(0,l2,0) glRotatef(θ3,0,0,1,); lower_arm();}
Main(){ … glMatrixMode(GL_MODELVIEW); glLoadIdentity();
2D_lamp(a,b,c,d,e,f) …}
//set current matrixto identity
Hierarchical Modeling• Consider a model of a car – how many symbols? – how many instances?
Hierarchical Modeling• Consider a model of a car – 2 symbols : – 5 instances :
Hierarchical Modeling• Consider a model of a car – 2 symbols : chassis + wheel – 5 instances : 1 chassis + 4 wheel
World system
front-left wheel system
Chasis system
Hierarchical Modeling• Consider a model of a car – 2 symbols : chassis + wheel – 5 instances : 1 chassis + 4 wheel
• We can represent our car as a tree to show the relationship between the parts
- tree nodes store subparts - transition edges represent relationship
between the parts
Hierarchical Modeling• Consider a model of a car – 2 symbols : chassis + wheel – 5 instances : 1 chassis + 4 wheel
• We can represent our car as a tree to show the relationship between the parts
• However, since all 4 wheels are instances of the same model, we’d like to only have that model appear once
Hierarchical Modeling• Hierarchical model can be composed of instances using
trees or directed acyclic graphs (DAGs) - edges contains geometric transformations - nodes contains geometry of subparts
Hierarchical Modeling
What might we draw the tree for the lamp?
• Hierarchical model can be composed of instances using trees or directed acyclic graphs (DAGs)
- edges contains geometric transformations - nodes contains geometry of subparts
Hierarchical Modeling• Hierarchical model can be composed of instances using
trees or directed acyclic graphs (DAGs) - edges contains geometric transformations - nodes contains geometry
1
23c
2c
1c
A
Hierarchical Modeling• Hierarchical model can be composed of instances using
trees or directed acyclic graphs (DAGs) - edges contains geometric transformations - nodes contains geometry
lower arm
base
Upper arm
world
)(),( 0RyxT
)(),0( 10 RlT
)()0,( 21 RlT
)()0,( 32 RlTmiddle arm1
23c
2c
1c
A
A More Complex Example: Human Figure
torso
A More Complex Example: Human Figure
torso
A More Complex Example: Human Figure
What’s the most efficient way to draw this figure?
torso
A More Complex Example: Human Figure
What’s the most sensible way to traverse this tree?
torso
A More Complex Example: Human Figure
What’s the most sensible way to traverse this tree?
torso
A More Complex Example: Human Figure
What’s the most sensible way to traverse this tree?
torso
A More Complex Example: Human Figure
What’s the most sensible way to traverse this tree?
torso
A More Complex Example: Human Figure
What’s the most sensible way to traverse this tree?
torso
A More Complex Example: Human Figure
What’s the most sensible way to traverse this tree?
torso
A More Complex Example: Human Figure
What’s the most sensible way to traverse this tree?
torso
A More Complex Example: Human Figure
What’s the most sensible way to traverse this tree?
torso
A More Complex Example: Human Figure
What’s the most sensible way to traverse this tree?
torso
A More Complex Example: Human Figure
What’s the most sensible way to traverse this tree?
torso
Opengl Implementation: Human Figure
Mh
Mlua
Mlla
torso
Opengl Implementation: Human Figure
Mh
Mlua
Mlla
torso
Is this correct?
Opengl Implementation: Human Figure
Mh
Mh*Mlua should be Mlua
Mh*Mlua*Mlla should be Mlua*Mlla
Itorso
Is this correct? No
Matrix Stack
• glMatrixMode(GL_MODELVIEW) - Initially, each of the stacks contains one matrix, an
identity matrix. - The top matrix in the stack is “current matrix” - The depth is at least 32
Mc
…I
11...MMMM kKc
Push and Pop the Current Matrix
• glPushMatrix() copy the current matrix at the top of the stack
Mc
… Mc
…
Mc
II
Push and Pop the Current Matrix
• glPopMatrix() destroies the matrix at the top of stack
Mtop-1
…
Mtop Mtop-1
…
II
Opengl Implementation: Human Figure
Opengl Implementation: Human Figure
I
Mh
Mlua
Mlua Mlla
Articulated Models