0% found this document useful (0 votes)
56 views

CS 4731: Computer Graphics Lecture 8: 3D Affine Transforms: Emmanuel Agu

This document discusses 3D affine transformations including translation, scaling, and rotation in 3D space. It introduces representing points in 3D using homogeneous coordinates as column vectors with x, y, z, and w components. It describes how to perform translations, scaling, and rotations of 3D points using 4x4 transformation matrices, including the specific forms of matrices for translating, uniformly scaling, and rotating about the x, y, and z axes. Rotation in 3D requires specifying the axis of rotation, unlike 2D where rotation is always about the origin.

Uploaded by

mahesh
Copyright
© © All Rights Reserved
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
56 views

CS 4731: Computer Graphics Lecture 8: 3D Affine Transforms: Emmanuel Agu

This document discusses 3D affine transformations including translation, scaling, and rotation in 3D space. It introduces representing points in 3D using homogeneous coordinates as column vectors with x, y, z, and w components. It describes how to perform translations, scaling, and rotations of 3D points using 4x4 transformation matrices, including the specific forms of matrices for translating, uniformly scaling, and rotating about the x, y, and z axes. Rotation in 3D requires specifying the axis of rotation, unlike 2D where rotation is always about the origin.

Uploaded by

mahesh
Copyright
© © All Rights Reserved
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 28

CS 4731: Computer Graphics

Lecture 8: 3D Affine transforms

Emmanuel Agu
Introduction to Transformations

Introduce 3D affine transformation:


Position (translation)
Size (scaling)
Orientation (rotation)
Shapes (shear)
Previously developed 2D (x,y)
Now, extend to 3D or (x,y,z) case
Extend transform matrices to 3D
Enable transformation of points by multiplication
Point Representation

Previously, point in 2D as column matrix


x
x
y
y 1

Now, extending to 3D, add z-component:

x Px

y or Py
z P
Pz
1
1

3D Coordinate Systems
All perpendicular: X x Y = Z ; Y x Z = X; Z x X
= Y;
Tip: sweep fingers x-y: thumb is z y
Y
+z

x x
+z

Left hand coordinate system


Not used in this class and
Right hand coordinate system Not in OpenGL
Transforms in 3D

2D: 3x3 matrix multiplication


3D: 4x4 matrix multiplication: homogenous coordinates
Recall: transform object = transform each vertice
General form:

m11 m12 m13 m14 Qx Px


Xform of P
m21 m22 m23 m24 Qy Py
M M
m31 m32 m33 m34 Q Pz
z
0 0 0 1 1 1

3x3 2D Translation Matrix

Previously, 2D :

x' x tx

y' y t
y

x' 1 0 tx x

y' 0 1 ty * y
1 0 0 1 1

3x3 2D Translation Matrix

Now, 3D : x' x tx

y' y ty
z' z t
OpenGL: z
gltranslated(tx,ty,tz)

x' 1 0 0 tx x

y' 0 1 0 ty y
z' 0 * z
0 1 tz
1
1 0 0 0 1

Where: x= x.1 + y.0 + z.0 + tx.1 = x + tx, etc
2D Scaling

Scale: Alter object size by scaling factor (sx, sy). i.e

x = x . Sx x' Sx 0 x

y = y . Sy y ' 0 Sy y

(4,4
)
(2,2) Sx = 2, Sy = 2

(2,2)
(1,1)
3x3 2D Scaling Matrix

x' Sx 0 x

y ' 0 Sy y

x' Sx 0 0 x

y ' 0 Sy 0 y
1 0 0 1 1

4x4 3D Scaling Matrix

x' Sx 0 0 x
Example:
y ' 0 Sy 0 y If Sx = Sy = Sz = 0.5
1 0 0 1 1
Can scale:
big cube (sides = 1) to
small cube ( sides = 0.5)
2D: square, 3D cube
x' Sx 0 0 0 x

y' 0 Sy 0 0 y
z' 0 0 Sz 0
z OpenGL:

1 0 0 0 1 1 glScaled(Sx,Sy,Sz)

Rotation

(x,y) -> Rotate about the origin by (x,y)

(x, y) (x,y)

r

How to compute (x, y) ?

x = r cos () y = r sin ()
x = r cos ( +) y = r sin ( +)
Rotation

Using trig identity


(x,y)
x = x cos() y sin()

y = y cos() + x sin() (x,y)


r

Matrix form?

x' cos( ) sin( ) x



y ' sin( ) cos( ) y

3 x 3?
3x3 2D Rotation Matrix

x' cos( ) sin( ) x


(x,y)

y ' sin( ) cos( ) y


(x,y)
r

x' cos( ) sin( ) 0 x



y ' sin( ) cos( ) 0 y
1 0 0 1 1

Rotating in 3D

Cannot do mindless conversion like before


Why?
Rotate about what axis?
3D rotation: about a defined axis
Different Xform matrix for:
Rotation about x-axis
Rotation about y-axis
Rotation about z-axis
New terminology
X-roll: rotation about x-axis
Y-roll: rotation about y-axis
Z-roll: rotation about z-axis
Rotating in 3D

New terminology
X-roll: rotation about x-axis
Y-roll: rotation about y-axis
Z-roll: rotation about z-axis
Which way is +ve rotation
Look in ve direction (into +ve arrow)
CCW is +ve rotation

+ x
z
Rotating in 3D
Rotating in 3D

For a rotation angle, about an axis


Define:

c cos s sin

A x-roll:
1 0 0 0

0 c s 0
Rx
0
OpenGL:
0 s c
glrotated(, 1,0,0)
0 0 0 1

Rotating in 3D

A y-roll: c 0 s 0
Rules:
0 1 0 0
Ry
Rotate row, column
OpenGL:
0
int. is 1
s 0 c
glrotated(, 0,1,0) Rest of row/col is 0
0 0 0 1
c,s in rect pattern

A z-roll:
c s 0 0

s c 0 0
Rz
OpenGL: 0 0 1 0

glrotated(, 0,0,1) 0 0 0 1

Rotating in 3D

Q: Using y-roll equation, rotate P = (3,1,4) by 30 degrees:

A: c = cos(30) = 0.866, s = sin(30) = 0.5, and

c 0 s 0 3 4.6

0 1 0 0 1 1
Q
s 0 c 0 4 1.964

0 0 0 1 1 1

E.g. first line: 3.c + 1.0 + 4.s + 1.0 = 4.6


Rotating in 3D

Q: Write C code to Multiply point P = (Px, Py, Pz, 1) by a 4x4


matrix shown below to give new point Q = (Qx,Qy,Qz, 1). i.e.

where

m11 m12 m13 m14


Qx Px
m21 m22 m23 m24
Qy Py M
M m m32 m33 m34
Qz Pz 31
0 0 0 1
1 1

Rotating in 3D

Outline of solution:
Declare P,Q as array:
Double P[4], Q[4];
Declare transform matrix as 2-dimensional array
Double M[4][4];
Remember: C indexes from 0, not 1
Long way:
Write out equations line by line expression for Q[i]
E.g. Q[0] = P[0]*M[0][0] + P[1]*M[0][1] + P[2]*M[0][2] +
P[3]*M[0][3]
Cute way:
Use indexing, say i for outer loop, j for inner loop
Rotating in 3D

Using loops looks like:


for(i=0;i<4;i++)
{
temp = 0;
for(j=0;j<4;j++)
{
temp += P[j]*M[i][j];
}
Q[i] = temp;
}
Test matrice code rigorously
Use known results (or by hand) and plug into your code
3D Rotation About Arbitrary Axis

Arbitrary rotation axis (rx, ry, rz)


openGL: rotate(, rx, ry, rz)
Without openGL: a little hairy!!
Important: read Hill pp. 239-241

y (rx, ry, rz)

z
3D Rotation About Arbitrary Axis

Can compose arbitrary rotation as combination of:


X-roll
Y-roll
Z-roll

M Rz ( 3 ) R y ( 2 ) Rx ( 1 )
3D Rotation About Arbitrary Axis

Classic: use Eulers theorem


Eulers theorem: any sequence of rotations = one rotation
about some axis
Our approach:
Want to rotate about the axis u through origin and arbitrary
point
Use two rotations to align u and x-axis
Do x-roll through angle
Negate two previous rotations to de-align u and x-axis
3D Rotation About Arbitrary Axis

Ru ( ) R y ( ) Rz ( ) Rx ( ) Rz ( ) R y ( )
Composing Transformation

Composing transformation applying several transforms


in succession to form one overall transformation
Example:
M1 X M2 X M3 X P
where M1, M2, M3 are transform matrices applied to P
Be careful with the order
Matrix multiplication is not commutative
References

Hill, chapter 5.3

You might also like