Você está na página 1de 70

MODELING TRANSFORMATION

1
2
Modeling
Transformations
2D Transformations
3D Transformations
OpenGL Transformation
3
2D-Transformations
Basic Transformations
Homogeneous coordinate system
Composition of transformations

4
Translation 2D
(4,5) (7,5)
Y
X Before Translation
(
(
(

(
(
(

=
(
(
(

'
'
+ =
'
(

=
(

'
'
=
'
(

=
1
*
1 0 0
1 0
0 1
1
y
x
d
d
y
x
T P P
d
d
T
y
x
P
y
x
P
y
x
y
x
Form s Homogeniou
x = x + d
x

y = y + d
y

(7,1) (10,1)
X
Y
Translation by (3,-4)
5
Scaling 2D
(4,5) (7,5)
Y
X
(2,5/4) (7/2,5/4)
X
Y
Before Scaling Scaling by (1/2, 1/4)
(

=
(


'
=
=
'
=
'
y
x
y
x
y
x
s y
s x
y
x
s
s
P P S
y s y
x s x
*
*
*
0
0
*
*
*
Types of Scaling:

Differential ( s
x
!= s
y
)
Uniform ( s
x
= s
y
)

(
(
(

(
(
(

=
(
(
(

'
'
1
*
1 0 0
0 0
0 0
1
y
x
s
s
y
x
x
x
Form s Homogeniou
Rotation 2D
( )
( )
(

+
+
=
'
u |
u |
sin
cos
r
r
v
( )

= '
= '
+
u | u |
u | u |
u |
cos sin sin cos
sin sin cos cos
r r y
r r x
expand
u u
u u
u
|
cos sin
sin cos
sin
cos
y x y
y x x
r y
r x
+ = '
= '

=
=
but
(

=
|
|
sin
cos
r
r
v
7
Rotation 2D
(5,2) (9,2)
Y
X
(2.1,4.9)
(4.9,7.8)
X
Y
Before Rotation Rotation of 45 deg. w.r.t. origin
(
(
(

(
(
(


=
(
(
(

'
'
1
*
1 0 0
0 cos sin
0 sin cos
1
Form s Homogeniou
y
x
y
x
u u
u u
(

=
(


'
=
u u
u u
u u
u u
cos * sin *
sin * cos *
*
cos sin
sin cos
*
y x
y x
y
x
P P R
y y x
x y x
'
= +
'
=
u u
u u
cos * sin *
sin * cos *
8
Mirror Reflection
(
(
(

=
=
'
=
'
1 0 0
0 1 0
0 0 1
axis - X about Reflection
x
M
y y x x
(
(
(

=
=
'
=
'
1 0 0
0 1 0
0 0 1
axis - Y about Reflection
y
M
y y x x
(1,1)
(1,-1)
Y
X
(-1,1) (1,1)
X
Y
9
Shearing Transformation
(
(
(

=
(
(
(

=
(
(
(

=
1 0 0
0 1
0 1
1 0 0
0 1
0 0 1
1 0 0
0 1 0
0 1
b
a
SH b SH
a
SH
xy y x
unit cube
Sheared in X
direction
Sheared in Y
direction
Sheared in both X
and Y direction
10
Inverse 2D - Transformations
y
-
y
x
-
x
) , (
-
(sx,sy)
(-
-
(
(-dx,-dy)
-
(dx,dy)
M M
M M
S S
R R
T T
sy sx
=
=
=
=
=
1
1
1
)
1
)
1

: Ref Mirror
: Sclaing
: Rotation
: n Translaito
1 1
11
Homogeneous Co-ordinates
Translation, scaling and rotation are expressed
(non-homogeneously) as:
translation: P' = P + T
Scale: P' = S P
Rotate: P' = R P
Composition is difficult to express, since
translation not expressed as a matrix
multiplication
Homogeneous coordinates allow all three to be
expressed homogeneously, using multiplication
by 3 3 matrices
W is 1 for affine transformations in graphics
12
Homogeneous Co-ordinates
P
2d
is a projection of P
h
onto the w = 1 plane
So an infinite number of points correspond to :
they constitute the whole line (tx, ty, tw)
x
y
w
P
h
(x,y,w)
P
2d
(x,y,1)
w=1
13
Classification of Transformations
1. Rigid-body Transformation
Preserves parallelism of lines
Preserves angle and length
e.g. any sequence of R(u) and T(dx,dy)
2. Affine Transformation
Preserves parallelism of lines
Doesnt preserve angle and length
e.g. any sequence of R(u), S(sx,sy) and T(dx,dy)
unit cube
45 deg rotaton Scale in X not in Y
14
Properties of rigid-body transformation
(
(
(

1 0 0
22 21
12 11
y
x
t r r
t r r
The following Matrix is Orthogonal if the upper left 2X2 matrix has the
following properties
1. A) Each row are unit vector.
sqrt(r
11
* r
11
+ r
12
* r
12
) = 1
B) Each column are unit vector.
sqrt(c
11
* c
11
+ c
12
* c
12
) = 1

2. A) Rows will be perpendicular to each other
(r
11
, r
12
) . ( r
21
, r
22
) = 0
B) Columns will be perpendicular to each other
(c
11
, c
12
) . (c
21
,c
22
) = 0
e.g. Rotation matrix is orthogonal

(
(
(


1 0 0
0 cos sin
0 sin cos
u u
u u
Orthogonal Transformation Rigid-Body Transformation
For any orthogonal matrix B B
-1
= B
T

15
Commutativity of Transformation Matrices
In general matrix multiplication is not commutative
For the following special cases commutativity holds i.e.
M
1
.M
2
= M
2
.M
1

M
1
M
2

Translate Translate
Scale Scale
Rotate Rotate
Uniform Scale Rotate
Some non-commutative
Compositions:
Non-uniform scale, Rotate
Translate, Scale
Rotate, Translate
Original
Transitional
Final
16
Associativity of Matirx Multiplication
Create new affine transformations by multiplying sequences of
the above basic transformations.
q = CBAp
q = ( (CB) A) p = (C (B A))p = C (B (Ap) ) etc.
matrix multiplication is associative.
But to transform many points, best to do
M = CBA
then do q = Mp for any point p to be rendered.
To transform just a point, better to do q = C(B(Ap))
For geometric pipeline transformation, define M and set it up
with the model-view matrix and apply it to any vertex
subsequently defined to its setting.
17
Rotation of u about P(h,k): R
u,P

R
u,P
=
Q(x,y)
P(h,k)
Step 1: Translate P(h,k) to origin
T(-h ,-k)
Q
1
(x

,y

)
P
1
(0,0)
Step 2: Rotate u w.r.t to origin
R
u
*
Q
2
(x

,y

)
P
2
(0,0)
Step 3: Translate (0,0) to P(h,k0)
T(h ,k) *
P
3
(h,k)
Q
3
(x

+h, y

+k)
18
Scaling w.r.t. P(h,k): S
sx,sy,p
T(-h ,-k) S(s
x
,s
y
)* T(h ,k) *
S
sx,sy,P
=
(4,3)
(1,1) (4,1)
S
3/2,1/2,(1,1)

Step 1: Translate P(h,k) to origin
(4,2)
(0,0) (4,0)
T(-1,-1)
Step 2: Scale S(s
x
,s
y
) w.r.t origin
(6,1)
(6,0) (0,0)
S(3/2,1/2)
(7,1)
Step 3: Translate (0,0) to P(h,k)
(7,2)
(1,1)
T(1,1)
19
Reflection about line L, M
L

Step 1: Translate (0,b) to origin
T(0 ,-b) M
L
=
Step 2: Rotate -u degrees
Step 3: Mirror reflect about X-axis
R(-u) * T(0 ,b) *
Step 4: Rotate u degrees
Step 5: Translate origin to (0,b)
M
x
* R(u) *
(0,b)
Y
X
t
O
Y
X O
Y
X O
Y
X O
Y
X O
(0,b)
Y
X
t
O
20
Problems to be solved:
Schaums outline series:
Problems:
4.1
4.2
4.3, 4.4, 4.5 => R
u,P

4.6, 4.7, 4.8 => S
sx,sy,,P
4.9, 4.10, 4.11, 4.21 => M
L
4.12 => Shearing
Pg-281(1.24), Pg-320(5.19)
=> Circular view-port
21
3D Transformations
Basics of 3D geometry
Basic 3D Transformations
Composite Transformations

22
Orientation
Thumb points to +ve Z-axis
Fingers show +ve rotation from X to Y
axis
Y
X
Z (out of page)
Y
X
Z (larger z are
away from viewer)
Right-handed orentation Left-handed orentation
23
Vectors in 3D
Have length and direction
V = [x
v
, y
v
, z
v
]
Length is given by the Euclidean Norm
||V|| = \( x
v
2
+ y
v
2
+ z
v
2
)
Dot Product
V U = [x
v
, y
v
, z
v
][x
u
, y
u
, z
u
]
= x
v
*x
u
+ y
v
*y
u
+ z
v
*z
u

= ||V|| || U|| cos
Cross Product
V U
= [y
v
*z
u
- z
v
y
u
, -x
v
*z
u
+ z
v
*x
u
, x
v
*y
u
y
v
*x
u
]
= q ||V|| || U|| sin
V U = - ( U x V)
(xv,yv,zv)
x
y
z
24
3D Equation of Curve & Line
Parametric equations of Curve & Line
Curve


Line
( )
( )
( )
b t a
t h z
t g y
t f x
C s s
=
=
=
:
( )
( )
( )
V t P P P t P L
t
t z z z z
t y y y y
t x x x x
L
P P P P V
+ = + =
s s
+ =
+ =
+ =
= =
0 0 1 0
0 1 0
0 1 0
0 1 0
0 1
1
0
) (
1 0 :
P
0
(x
0
,y
0
,z
0
)
P
1
(x
1
,y
1
,z
1
)
V
x
y
z
C
25
3D Equation of Surface & Plane
Parametric equations of Surface & Plane
Surface


Plane : with Normal, N
( )
( )
( )
d t c
b s a
t s h z
t s g y
t s f x
S
s s
s s
=
=
=
,
,
,
:
P
0

N
k C j B i A N
D Cz By Ax


0
+ + =
= + + +
26
3D Plane
Ways of defining a plane
1. 3 points P
0
, P
1
, P
2
on the plane
2. Plane Normal N & P
0
on plane

3. Plane Normal N & a vector V on the plane
Plane Passing through P
0
, P
1
, P
2


P
0

P
1

P
2
N
V

| |
) (
0
0

) (

) (

) ( )


(
0


0 0 0
0 0 0
0
2 0 1 0
Cz By Ax D
D Cz By Ax
k z z j y y i x x k C j B i A
P P N
k C j B i A P P P P N
+ + =
= + + +
= + + - + +
= -
+ + = =
where

plane the on is z) y, P(x, if
27
Affine Transformation
Transformation is a function that takes a point (or vector) and
maps that point (or vector) into another point (or vector).
A coordinate transformation of the form:
x = a
xx
x + a
xy
y + a
xz
z + b
x
,
y = a
yx
x + a
yy
y + a
yz
z + b
y
,
z = a
zx
x + a
zy
y + a
zz
z + b
z
,
is called a 3D affine transformation.
|
|
|
|
|
.
|

\
|
|
|
|
|
|
.
|

\
|
=
|
|
|
|
|
.
|

\
|
1 1 0 0 0

'
'
'
z
y
x
b a a a
b a a a
b a a a
w
z
y
x
z zz zy zx
y yz yy yx
x xz xy xx
The 4
th
row for affine transformation is always [0 0 0 1].
Properties of affine transformation:
translation, scaling, shearing, rotation (or any combination of them) are
examples affine transformations.
Lines and planes are preserved.
parallelism of lines and planes are also preserved, but not angles and
length.
28
Translation 3D
P P d d d T
d z
d y
d x
z
y
x
d
d
d
z y x
z
y
x
z
y
x
'
=

(
(
(
(

+
+
+
=
(
(
(
(

(
(
(
(

* ) , , (
1 1
*
1 0 0 0
1 0 0
0 1 0
0 0 1
z
y
x
d z z
d y y
d x x
+ =
'
+ =
'
+ =
'
29
Scaling 3D
(
(
(
(

=
(
(
(
(

(
(
(
(


'
=
1
*
*
*
1
*
1 0 0 0
0 0 0
0 0 0
0 0 0
* ) , , (
z
y
x
z
y
x
z y x
s z
s y
s x
z
y
x
s
s
s
P P s s s S
Original
scale all axes
scale Y axis
z s z
y s y
x s x
z
y
x
*
*
*
=
'
=
'
=
'
30
Rotation 3D

(
(
(
(

=
(
(
(
(

(
(
(
(



'
=
1
cos * sin *
sin * cos *
1
*
1 0 0 0
0 1 0 0
0 0 cos sin
0 0 sin cos
*
,
z
y x
y x
z
y
x
P P R
k
u u
u u
u u
u u
u
For 3D-Rotation 2
parameters are needed
Angle of rotation
Axis of rotation
Rotation about z-axis:
31
Rotation about Y-axis & X-axis

(
(
(
(

+
+
=
(
(
(
(

(
(
(
(


' =
1
cos * sin *
sin * cos *
1
*
1 0 0 0
0 cos 0 sin
0 0 1 0
0 sin 0 cos
*
,
u u
u u
u u
u u
u
z x
y
z x
z
y
x
P P R
j
(
(
(
(

=
(
(
(
(

(
(
(
(


' =
1
cos * sin *
sin * cos *
1
*
1 0 0 0
0 cos sin 0
0 sin cos 0
0 0 0 1
*
,
u u
u u
u u
u u
u
z y
z y
x
z
y
x
P P R
i
About x-axis
About y-axis
32
Shear along Z-axis
(
(
(
(

+
+
=
(
(
(
(

(
(
(
(


'
=
1
*
*
1
*
1 0 0 0
0 1 0 0
0 1 0
0 0 1
* ) , (
z
sh z y
sh z x
z
y
x
sh
sh
P P sh sh SH
y
x
y
x
y x xy
y
x
z
33
Object Transformation
Line: Can be transformed by transforming
the end points
Plane:(described by 3-points) Can be
transformed by transforming the 3-points
Plane:(described by a point and Normal)
Point is transformed as usual. Special
treatment is needed for transforming
Normal
34
Composite Transformations 3D
Some of the composite transformations to
be studied are:
A
V,N
= aligning a vector V with a vector N
R
u,L
= rotation about an axis L( V, P )
S
sx,sy,P
= scaling w.r.t. point P
35
A
V
: aligning vector V with k
A
v
= R
u,i

V = aI + bJ + cK
x
y
z
b
a
c
k
2 2

cos

sin
by axis - about x Rotate : 1 Step
c b
c
b
+ =

=
=
u
u
u
b
|V|

x
y
z
b
a
k
( 0, b,c)
b
|V|

x
y
z
a
k
|V|

u
u
( a, 0, )
( 0, 0, )
( 0, b,c)
36
A
V
: aligning vector V with k
A
v
= R
u,i
R
-,j
*
2 2

cos

sin
by axis - about x Rotate : 1 Step
c b
c
b
+ =

=
=
u
u
u
2 2 2

| V |
| V |

) cos(
| V |
) sin(
- by axis - y about V Rotate : 2 Step
c b a
a
+ + =

=
|
|
|
P( a, b, c)
b
x
y
z
b
a
c
k
| V|
( a, 0, )
( 0, b,c)
b
x
y
z
b
a
c
|V|
( 0, 0, |V|)
( 0, b,c)
a

37
A
V
: aligning vector V with k
A
V
-1
= A
V
T
A
V,N
= A
N
-1
* A
V
(
(
(
(

=

1 0 0 0
0
0 0
0

-
V
c
V
b
V
a
b c
V
ac
V
ab
V
V
A
38
R
u,L
:

rotation about an axis L
Let the axis L be represented by vector V and
passing through point P
1. Translate P to the origin
2. Align V with vector k
3. Rotate u about k
4. Reverse step 2
5. Reverse step 1
R
u,L
=

T
-P
A
V
*

R
u,k
*

A
V
-1
*

T
-P
-1
*
V
P
u
Q
Q'
L
z
x
y
k
39
M
N,P
:

Mirror reflection
Let the plane be represented by plane normal N
and a point P in that plane
x
y
z
40
M
N,P
:

Mirror reflection
Let the plane be represented by plane normal N
and a point P in that plane
1. Translate P to the origin
M
N,P
=

T
-P
x
y
z
41
M
N,P
:

Mirror reflection
Let the plane be represented by plane normal N
and a point P in that plane
1. Translate P to the origin
2. Align N with vector k
M
N,P
=

T
-P
A
N
*

x
y
z
42
M
N,P
:

Mirror reflection
Let the plane be represented by plane normal N
and a point P in that plane
1. Translate P to the origin
2. Align N with vector k
3. Reflect w.r.t xy-plane
M
N,P
=

T
-P
A
N
*

S
1,1,-1
*

x
y
z
43
x
y
z
M
N,P
:

Mirror reflection
Let the plane be represented by plane normal N
and a point P in that plane
1. Translate P to the origin
2. Align N with vector k
3. Reflect w.r.t xy-plane
4. Reverse step 2
M
N,P
=

T
-P
A
N
*

S
1,1,-1
*

A
N
-1
*

44
M
N,P
:

Mirror reflection
Let the plane be represented by plane normal N
and a point P in that plane
1. Translate P to the origin
2. Align N with vector k
3. Reflect w.r.t xy-plane
4. Reverse step 2
5. Reverse step 1
M
N,P
=

T
-P
A
N
*

S
1,1,-1
*

A
N
-1
*

T
-P
-1
*
x
y
z
45
Further Composition
The Composite Transform must have
Translation of P
1
to Origin T
z
x
y
3
P'
1
P'
2
P' T
Some Combination of Rotations R
R
x
y
z
2
P' '
3
P' '
1
P' '
z
x
y
3
P
1
P
2
P
Fig. 1 Fig. 2
Translate points in fig. 1 into points in fig 2 such that:
P
3
is moved to yz plane
P
2
is on z-axis
P
1
is at Origin
46
Finding R
x x
z y x
z y x
z z z
y y y
x x x
R x .x R
R R R
R R R
z R y R x R
z R y R x R
z R y R x R
r r r
r r r
r r r
R
R
vextor of component : Note
other each to
lar perpendicu are ii)
vectors unit are i)
Transform body - Rigid is R
be Let

(
(
(

=
(
(
(

=
, ,
, ,
. . .
. . .
. . .
33 32 31
23 22 21
13 12 11
47
Finding R
z
| |
z
z
z
z
z y x
z y x
z y x
T T
R
z R
y R
x R
z R z R z R
y R y R y R
x R x R x R
R R k R
=
' '
' '
=
(
(
(

' '
' '
=
(
(
(

(
(
(

=
' '
' '
=

2 1
2 1
2 1
2 1
2 1
2 1
P P
P P
P P
P P

P P
P P
.
.
.
1
0
0
. . .
. . .
. . .

R
z
x
y
3
P
'
1
P'
2
P'
x
y
z 2
P
' '
3
P
' '
1
P
' '
R
z
k

k R
R

=
' '
' '

' '
2 1
2 1
2 1
P P
P P
axis - z along P P aligns
48
R
x
y
z 2
P
' '
3
P
' '
1
P
' '
z
x
y
3
P
'
1
P'
2
P'
Finding R
x

x
x
x
x
z y x
z y x
z y x
R
z R
y R
x R
z R z R z R
y R y R y R
x R x R x R
i R
=
' '

' '
' '

' '
=
(
(
(

' '

' '
' '

' '
=
(
(
(

(
(
(

' '

' '
' '

' '
=

2 1 3 1
2 1 3 1
2 1 3 1
2 1 3 1
2 1 3 1
2 1 3 1
P P P P
P P P P
P P P P
P P P P
P P P P
P P P P
.
.
.
0
0
1
. . .
. . .
. . .

1
R
x
i

i R
R

=
' '

' '
' '

' '

' '

' '
2 1 3 1
2 1 3 1
2 1 3 1
P P P P
P P P P
axis - x along P P P P aligns
R
z
k

49
Finding R
y
y
y
y
y
z y x
z y x
z y x
R
z R
y R
x R
z R z R z R
y R y R y R
x R x R x R
j R
= =
(
(
(

=
(
(
(

(
(
(

=

x z
x z
x z
R R
R R
R R
.
.
.
0
1
0
. . .
. . .
. . .

1
( ) j R
R

=

x z
x z
R R
axis - y along R R aligns
R
x
y
z 2
P
' '
3
P
' '
1
P
' '
z
x
y
3
P
'
1
P'
2
P'
R
x
i

R
z
k

R
y
j

50
Problems to be solved:
Schaums outline series:
Problems:
6.1
6.2, 6.5, 6.9, 6.10, 6.11, 6.12 A
v
6.3, 6.4 R
u,L
6.6, 6.7, 6.8 M
N,P

51
Transformations in OpenGL
OpenGL transformation commands
Transformation Order
Hierarchical Modeling
52
Transformations in OpenGL
OpenGL uses 3 stacks to maintain transformation
matrices:
Model & View transformation matrix stack
Projection matrix stack
Texture matrix stack
You can load, push and pop the stack
The top most matrix from each stack is
applied to all graphics primitive until it is
changed
M
N
Model-View
Matrix Stack
Projection
Matrix Stack
Graphics
Primitives
(P)
Output
NMP
53
General Transformation Commands
Specify current matrix (stack) :
void glMatrixMode(GLenum mode)
Mode : GL_MODELVIEW, GL_PROJECTION,
GL_TEXTURE
Initialize current matrix.
void glLoadIdentity(void)
Sets the current matrix to 4X4 identity matirx
void glLoadMatrix{f|d}(cost TYPE *M)
Sets the current matrix to 4X4 matrix specified by M


Note: current matrix Top most matrix of the current
matrix
stack
A
B
C
A
B
I
A
B
M
g
l
L
o
a
d
M
a
t
r
i
x
(
M
)

54
General Transformation Commands
Concatenate Current Matrix:
void glMultMatrix(const TYPE *M)
Multiplies current matrix C, by M. i.e. C = C*M
Caveat: OpenGL matrices are stored in
column major order.




Best use utility function glTranslate, glRotate, glScale
for common transformation tasks.
(
(
(
(

16 12 8 4
15 11 7 3
14 10 6 2
13 9 5 1
m m m m
m m m m
m m m m
m m m m
55
Transformations and OpenGL

Each time an OpenGL transformation M is called
the current MODELVIEW matrix C is altered:
Cv v =
'
CMv v =
'
glTranslatef(1.5, 0.0, 0.0);
glRotatef(45.0, 0.0, 0.0, 1.0);

CTRv v =
'
Note: v is any vertex placed in rendering pipeline v is the transformed
vertex from v.
56
Sample Instance Transformation
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(...);
glRotatef(...);
glScalef(...);
gluCylinder(...);
57
Thinking About Transformations
As a Global System
Objects moves but
coordinates stay the same
Think of transformation
in reverse order as they
appear in code
As a Local System
Objects moves and
coordinates move with it
Think of transformation
in same order as they
appear in code

There is a World Coordinate System where:
All objects are defined
Transformations are in World Coordinate space
Two Different Views
58
Local View
Translate Object
Then Rotate
Order of Transformation TR
glLoadIdentity();
glMultiMatrixf( T);
glMultiMatrixf( R);
draw_ the_ object( v);
v = ITRv
Global View
Rotate Object
Then Translate
Effect is same, but perception is different
59
Order of Transformation RT
glLoadIdentity();
glMultiMatrixf( R);
glMultiMatrixf( T);
draw_ the_ object( v);
v = ITRv
Local View
Rotate Object
Then Translate
Global View
Translate Object
Then Rotate
Effect is same, but perception is different
60
Hierarchical Modeling
Many graphical objects are structured
Exploit structure for
Efficient rendering
Concise specification of model parameters
Physical realism
Often we need several instances of an object
Wheels of a car
Arms or legs of a figure
Chess pieces
Encapsulate basic object in a function
Object instances are created in standard form
Apply transformations to different instances
Typical order: scaling, rotation, translation
61
OpenGL & Hierarchical Model
A
B
C
C
void glPushMatrix(void);
A
B
void glPoipMatrix(void);
A
B
C
C
m
glGetFloatv
void glGetFloatv(GL_MODELVIEW_MATRIX, *m);
A
B
C
Some of the OpenGL functions helpful for
hierarchical modeling are:
62
Scene Graph
A scene graph is a hierarchical representation of a scene
We will use trees for representing hierarchical objects
such that:
Nodes represent parts of an object
Topology is maintained using parent-child relationship
Edges represent transformations that applies to a part and all the
subparts connected to that part

typedef struct treenode {
GLfloat m[16]; // Transformation
void (*f) ( ); // Draw function
struct treenode *sibling;
struct treenode *child;
} treenode;
Scene
Sun Star X
Earth Venus Saturn
Moon Ring
63
Example - Torso
Initializing transformation matrix for node
treenode torso, head, ...;
/* in init function */
glLoadIdentity();
glRotatef(...);
glGetFloatv(GL_MODELVIEW_MATRIX, torso.m);

Initializing pointers
torso.f = drawTorso;
torso.sibling = NULL;
torso.child = &head;
64
Generic Traversal
To render the hierarchy:
Traverse the scene graph depth-first
Going down an edge:
push the top matrix onto the stack
apply the edge's transformation(s)
At each node, render with the top matrix
Going up an edge:
pop the top matrix off the stack

65
Generic Traversal : Torso
Recursive definition
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);
}
C is really not the right language for this !!
66
Viewing Transformation
67
Viewing Pipeline Revisited
x
w
y
w
z
w
p
w
Modeling
Transform
World
Coordinate
s
P
w
y
o
x
o
z
o
p
o
Graphics
Primitives
P
o
Object
Coordinates

Viewing
Transform
P
e
Eye
Coordinate
s
68
Viewing Transformation in
OpenGL
To setup the modelview matrix, OpenGL provides the
following function:
y
x
z
eye
(eyex, eyey, eyez)
center
(centerx, centery, centerz)
up
(upx, upy, upz)
gluLookAt( eyex, eyey, eyez,
centerx, centery, centerz,
upx, upy, upz )
69
Implementation
We want to construct an Orthogonal Frame such that,
( )
( )
( )
x z y
x
z
e C e C e C
p u v normalize e C
v e C
eye center normalize v
eye O C


. . .
.
.
.
=
=
=
=
=
C.e
z
C.O
(eye)
center
up
(upx, upy, upz)
v
C.e
x
C.e
y
(1) its origin is the point eye
(2) its -z basis vector points towards the point center
(3) the up vector projects to the up direction (+ve y-axis)
Let C (for camera) denote this frame.
Clearly,
70
Thank You

Você também pode gostar