Transformations computer graphics
-
Upload
vikram-halder -
Category
Education
-
view
124 -
download
0
Transcript of Transformations computer graphics
Transformations
2D Transformations3D TransformationsOpenGL Transformation
Basic transformations The most basic ones
Translation Scaling Rotation Shear And others, e.g., perspective transform, projection, etc
Basic types of transformations Rigid-body: preserves length and angle Affine: preserves parallel lines, not angles or lengths Free-form: anything goes
2D-Transformations
Basic Transformations Homogeneous coordinate system Composition of transformations
Translation – 2D
(4,5) (7,5)
Y
XBefore Translation
1*
1001001
1yx
dd
yx
TPPdd
Tyx
Pyx
P
y
x
y
x
Form sHomogeniou
x’ = x + dx y’ = y + dy
(7,1) (10,1)
X
Y
Translation by (3,-4)
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
sysx
yx
ss
PPS
ysyxsx
**
*0
0
*
**
Types of Scaling:
Differential ( sx != sy )Uniform ( sx = sy )
1*
1000000
1
Form sHomogeniou
yx
ss
yx
y
x
Rotation – 2D
sincos
rr
v
rota
ted
cossinsincossinsincoscos
rryrrx
expand
cossinsincos
sincos
but yxyyxx
ryrx
original
sincos
rr
v
Rotation – 2D
(5,2) (9,2)
Y
X
(2.1,4.9)
(4.9,7.8)
X
YBefore Rotation Rotation of 45 deg. w.r.t. origin
1*
1000cossin0sincos
1
Form sHomogeniou
yx
yx
cos*sin*sin*cos*
*cossinsincos
*
yxyx
yx
PPR
yyxxyx
cos*sin*sin*cos*
Mirror Reflection
100010001
axis-Xabout Reflection
xM
yyxx
100010001
axis-Yabout Reflection
yM
yyxx
(1,1)
(1,-1)
Y
X
(-1,1) (1,1)
X
Y
Shearing Transformation
1000101
10001001
10001001
ba
SHbSHa
SH xyyx
unit cube Sheared in Xdirection
Sheared in Ydirection
Sheared in both Xand Y direction
Inverse 2D - Transformations
y-y
x-x
),(-(sx,sy)
(-θ-(θ
(-dx,-dy)-
(dx,dy)
MM
MM
SS
RR
TT
sysx
1
1
1
)1)
1
:RefMirror
: Sclaing
: Rotation
:nTranslaito
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
Homogeneous Co-ordinates
P2d is a projection of Ph onto the w = 1 plane
So an infinite number of points correspond to : they constitute the whole line (tx, ty, tw)
xy
w Ph(x,y,w)
P2d(x,y,1)w=1
Classification of Transformations
1. Rigid-body Transformation Preserves parallelism of lines Preserves angle and length e.g. any sequence of R() and T(dx,dy)
2. Affine Transformation Preserves parallelism of lines Doesn’t preserve angle and length e.g. any sequence of R(), S(sx,sy) and T(dx,dy)
unit cube 45 deg rotaton Scale in X not in Y
Properties of rigid-body transformation
1002221
1211
y
x
trrtrr
The following Matrix is Orthogonal if the upper left 2X2 matrix has the following properties
1.A) Each row are unit vector. sqrt(r11* r11 + r12* r12) = 1
B) Each column are unit vector. sqrt(c11* c11 + c12* c12) = 1
2.A) Rows will be perpendicular to each other (r11 , r12 ) . ( r21 , r22) = 0
B) Columns will be perpendicular to each other (c11 , c12 ) . (c21 ,c22) = 0
e.g. Rotation matrix is orthogonal
1000cossin0sincos
• Orthogonal Transformation Rigid-Body Transformation
• For any orthogonal matrix B B-1 = BT
Commutativity of Transformation Matrices
• In general matrix multiplication is not commutative• For the following special cases commutativity holds
i.e. M1.M2 = M2.M1
M1 M2
Translate TranslateScale Scale
Rotate RotateUniform Scale Rotate
• Some non-commutative Compositions: Non-uniform scale,
Rotate Translate, Scale Rotate, Translate
OriginalTransitional
Final
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.
Rotation of about P(h,k): R,P
R,P=
Q(x,y)
P(h,k)
Step 1: Translate P(h,k) to origin
T(-h ,-k)
Q1(x’,y’)
P1 (0,0)
Step 2: Rotate w.r.t to origin
R*
Q2(x’,y’)
P2 (0,0)
Step 3: Translate (0,0) to P(h,k0)
T(h ,k) *P3(h,k)
Q3(x’+h, y’ +k)
Scaling w.r.t. P(h,k): Ssx,sy,p
T(-h ,-k)S(sx,sy)*T(h ,k) *Ssx,sy,P=
(4,3)
(1,1)
(4,1)
S3/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(sx,sy) 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)
Reflection about line L, ML
Step 1: Translate (0,b) to origin
T(0 ,-b)ML =
Step 2: Rotate - degrees
Step 3: Mirror reflect about X-axis
R(-) *T(0 ,b) *
Step 4: Rotate degrees
Step 5: Translate origin to (0,b)
M x*R() *
(0,b)
Y
Xt
O
Y
XO
Y
XO
Y
XO
Y
XO
(0,b)
Y
Xt
O
Problems to be solved:Schaum’s outline series:Problems: 4.1 4.2 4.3, 4.4, 4.5 => R,P
4.6, 4.7, 4.8 => Ssx,sy,P
4.9, 4.10, 4.11, 4.21 => ML
4.12 => Shearing
References
1. www.willamette.edu/~gorr/classes/GeneralGraphics/Transforms/transforms2d.htm
2. http://www.cs.sfu.ca/~torsten/Teaching/Cmpt361/LectureNotes/PDF/06_2Dtrans.pdf
3D TransformationsBasics of 3D geometryBasic 3D TransformationsComposite Transformations
OrientationThumb points to +ve Z-axisFingers show +ve rotation from
X to Y axisY
X
Z (out of page)
Y
X
Z (larger z areaway from viewer)
Right-handed orentation Left-handed orentation
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’ = axx x + axy y + axz z + bx ,
y’ = ayx x + ayy y + ayz z + by ,
z’ = azx x + azy y + azz z + bz ,
is called a 3D affine transformation.
11000
'''
zyx
baaabaaabaaa
wzyx
zzzzyzx
yyzyyyx
xxzxyxx
The 4th 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.
Translation – 3D
PPdddT
dzdydx
zyx
ddd
zyx
z
y
x
z
y
x
*),,(
11
*
1000100010001
z
y
x
dzz
dyydxx
Scaling – 3D
1***
1
*
1000000000000
*),,(
z
y
x
z
y
x
zyx
szsysx
zyx
ss
s
PPsssS
Original
scale all axes
scale Y axiszsz
ysyxsx
z
y
x
*
**
Rotation – 3D
1
cos*sin*sin*cos*
1
*
1000010000cossin00sincos
*,
zyxyx
zyx
PPR k
For 3D-Rotation 2 parameters are needed
Angle of rotation Axis of rotation
Rotation about z-axis:
Rotation about Y-axis & X-axis
1cos*sin*
sin*cos*
1
*
10000cos0sin00100sin0cos
*,
zxy
zx
zyx
PPR j
1cos*sin*sin*cos*
1
*
10000cossin00sincos00001
*,
zyzy
x
zyx
PPR iAbout x-axis
About y-axis
Shear along Z-axis
1
**
1
*
10000100010001
*),(
zshzyshzx
zyx
shsh
PPshshSH
y
x
y
x
yxxy
y
z
x
Composite Transformations – 3D
Some of the composite transformations to be studied are:
AV,N = aligning a vector V with a vector N
R,L = rotation about an axis L( V, P )
Ssx,sy,P= scaling w.r.t. point P
AV : aligning vector V with k
Av = R,i
V = aI + bJ + cK
x
y
z
b
a
c
k
22λ
λcos
λsin
by axis-about x Rotate :1 Step
cbc
b
b
|V|
x
y
z
b
a
k
( 0, b,c )b
|V|
x
y
z
a
k
|V|
( a, 0, )
( 0, 0, )
( 0, b,c )
AV : aligning vector V with k
Av = R,i R-,j *
22λ
λcos
λsin
by axis-about x Rotate :1 Step
cbc
b
222
|V|
|V|λ)cos(
|V|)sin(
-by axis-yabout V Rotate :2 Step
cba
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
AV : aligning vector V with k
AV-1 = AV
T
AV,N = AN-1 * AV
10000000
λλ
λ-
λ-λ
Vc
Vb
Va
bcVac
Vab
V
VA
R,L : rotation about an axis L
Let the axis L be represented by vector V and passing through point P1.Translate P to the
origin2. Align V with vector k3. Rotate about k
4. Reverse step 25. Reverse step 1R,L
= T-PAV *R,k
*AV
-1 *T-P-1 *
V
P
Q
Q'
Lz
x
y
k
MN,P : Mirror reflection
Let the plane be represented by plane normal N and a point P in that plane
xy
z N
P
MN,P : Mirror reflection
Let the plane be represented by plane normal N and a point P in that plane1.Translate P to the
origin
MN,P =
T-P
xy
z
N
P
MN,P : Mirror reflection
Let the plane be represented by plane normal N and a point P in that plane1.Translate P to the
origin2. Align N with vector k
MN,P =
T-PAN *
N
Px
y
z
MN,P : Mirror reflection
Let the plane be represented by plane normal N and a point P in that plane1.Translate P to the
origin2. Align N with vector k3. Reflect w.r.t xy-plane
MN,P =
T-PAN *S1,1,-1 *
N
Px
y
z
xy
z
MN,P : Mirror reflection
Let the plane be represented by plane normal N and a point P in that plane1.Translate P to the
origin2. Align N with vector k3. Reflect w.r.t xy-plane4. Reverse step 2
MN,P =
T-PAN *S1,1,-1 *AN-1 *
MN,P : Mirror reflection
Let the plane be represented by plane normal N and a point P in that plane1.Translate P to the
origin2. Align N with vector k3. Reflect w.r.t xy-plane4. Reverse step 2
5. Reverse step 1MN,P
= T-PAN *S1,1,-1 *AN
-1 *T-P-1 *
xy
z N
P
Further Composition
The Composite Transform must have – Translation of P1 to Origin T
zx
y3P
1P2PT
– Some Combination of Rotations R
Rx
y
z 2P
3P 1P
zx
y3P
1P2P
Fig. 1 Fig. 2
Translate points in fig. 1 into points in fig 2 such that:– P1 is at Origin– P1P2 is along positive z-axis– P1P3 lies in positive y-axis half of yz plane
Finding R
xx
zyx
zyx
zzz
yyy
xxx
Rx.x R
RRR
RRR
zRyRxRzRyRxRzRyRxR
rrrrrrrrr
R
R
vextor of component :Note
other each to larperpendicu are ii)
vectors unit are i)
Transform body-Rigid is R
be Let
,,
,,
...
...
...
333231
232221
131211
Finding Rz
z
z
z
z
zyx
zyx
zyx
TT
RzRyRxR
zRzRzRyRyRyRxRxRxR
RRkR
21
21
21
21
21
21
PPPP
PPPP
PPPP
.
.
.
100
...
...
...
ˆ 1
R
zx
y3P
1P2P
x
y
z 2P
3P 1P
Rz
k
kPP
PPR
axis-z along PP aligns R
21
21
21
ˆ
R
x
y
z 2P
3P 1P
zx
y3P
1P 2P
Finding Rx
x
2131
2131
x
x
x
2131
2131
zyx
zyx
zyx
T
2131
2131T
RPPPP
PPPP
zRyRxR
PPPP
PPPP
zRzRzRyRyRyRxRxRxR
RRPPPP
PPPPiR
´
´
´
´
´
´
.
.
.
001
...
...
...
ˆ 1 Rx
i
iR
R
ˆ´
´
´
2131
2131
2131
PPPPPPPP
axis-x along PPPP aligns
Rz
k
Finding Ry
yxz
y
y
y
xz
zyx
zyx
zyx
Txz
T
RRRzRyRxR
RRzRzRzRyRyRyRxRxRxR
RRRRjR
´
´
´
.
.
.
010
...
...
...
ˆ 1
jR
Rˆ´
´
xz
xz
RR
axis- yalong RR aligns
R
x
y
z 2P
3P 1P
zx
y3P
1P 2P
Rx
i
Rz
k
Ry
j
Problems to be solved:Schaum’s outline series:Problems: 6.1 6.2, 6.5, 6.9, 6.10, 6.11, 6.12 Av
6.3, 6.4 R,L
6.6, 6.7, 6.8 MN,P
Transformations in OpenGL
OpenGL transformation commandsTransformation OrderHierarchical Modeling
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-ViewMatrix Stack
ProjectionMatrix Stack
GraphicsPrimitives(P)
OutputN•M•P
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
ABC
ABI
ABM
glLo
adM
atrix
(M)
glLo
adId
entit
y
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.
161284
151173
141062
13951
mmmmmmmmmmmmmmmm
Transformations and OpenGL®
Each time an OpenGL transformation M is called the current MODELVIEW matrix C is altered: Cvv CMvv
glTranslatef(1.5, 0.0, 0.0);glRotatef(45.0, 0.0, 0.0, 1.0);
CTRvv
Note: v is any vertex placed in rendering pipeline v’ is the transformed vertex from v.
Sample Instance Transformation
glMatrixMode(GL_MODELVIEW);glLoadIdentity();glTranslatef(...);glRotatef(...);glScalef(...);gluCylinder(...);
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
Local View Translate Object Then Rotate
Order of Transformation T•R
glLoadIdentity();glMultiMatrixf( T);glMultiMatrixf( R);draw_ the_ object( v);v’ = ITRv
Global View Rotate Object
Then Translate
Effect is same, but perception is different
Order of Transformation R•T
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
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
OpenGL & Hierarchical Model
ABCC
glPushMat
rix
– void glPushMatrix(void);
AB
glPopMatrix
– void glPopMatrix(void);
ABC C
m
glGetFloatv
– void glGetFloatv(GL_MODELVIEW_MATRIX, *m);
ABC
Some of the OpenGL functions helpful for hierarchical modeling are:
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 parttypedef struct treenode {GLfloat m[16]; // Transformationvoid (*f) ( ); // Draw functionstruct treenode *sibling;struct treenode *child;
} treenode;
Scene
Sun Star X
Earth Venus Saturn
Moon Ring
Example - Torso Initializing transformation matrix for node
treenode torso, head, ...;/* in init function */glLoadIdentity();glRotatef(...);glGetFloatv(GL_MODELVIEW_MATRIX, torso.m);
Initializing pointerstorso.f = drawTorso;torso.sibling = NULL;torso.child = &head;
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
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 !!