Transformations computer graphics

Post on 14-Apr-2017

124 views 0 download

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

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 !!