cs 543: computer graphics lecture 4 (part i): 3d affine...
TRANSCRIPT
![Page 1: CS 543: Computer Graphics Lecture 4 (Part I): 3D Affine …web.cs.wpi.edu/~emmanuel/courses/cs543/slides/lecture04_p1.pdf · Point Representation n Previously, point in 2D as column](https://reader031.vdocuments.mx/reader031/viewer/2022030407/5a86721f7f8b9a882e8ceceb/html5/thumbnails/1.jpg)
CS 543: Computer GraphicsLecture 4 (Part I): 3D Affine transforms
Emmanuel Agu
![Page 2: CS 543: Computer Graphics Lecture 4 (Part I): 3D Affine …web.cs.wpi.edu/~emmanuel/courses/cs543/slides/lecture04_p1.pdf · Point Representation n Previously, point in 2D as column](https://reader031.vdocuments.mx/reader031/viewer/2022030407/5a86721f7f8b9a882e8ceceb/html5/thumbnails/2.jpg)
Introduction to Transformations
n Introduce 3D affine transformation:n Position (translation)n Size (scaling)n Orientation (rotation)n Shapes (shear)
n Previously developed 2D (x,y)n Now, extend to 3D or (x,y,z) casen Extend transform matrices to 3Dn Enable transformation of points by multiplication
![Page 3: CS 543: Computer Graphics Lecture 4 (Part I): 3D Affine …web.cs.wpi.edu/~emmanuel/courses/cs543/slides/lecture04_p1.pdf · Point Representation n Previously, point in 2D as column](https://reader031.vdocuments.mx/reader031/viewer/2022030407/5a86721f7f8b9a882e8ceceb/html5/thumbnails/3.jpg)
Point Representation
n Previously, point in 2D as column matrix
n Now, extending to 3D, add z-component:
yx
1yx
or
1zyx
=
1z
y
x
PPP
P
![Page 4: CS 543: Computer Graphics Lecture 4 (Part I): 3D Affine …web.cs.wpi.edu/~emmanuel/courses/cs543/slides/lecture04_p1.pdf · Point Representation n Previously, point in 2D as column](https://reader031.vdocuments.mx/reader031/viewer/2022030407/5a86721f7f8b9a882e8ceceb/html5/thumbnails/4.jpg)
Transforms in 3D
n 2D: 3x3 matrix multiplicationn 3D: 4x4 matrix multiplication: homogenous coordinatesn Recall: transform object = transform each verticen General form:
=
100034333231
24232221
14131211
mmmmmmmmmmmm
M
=
11z
y
x
z
y
x
PPP
MQQQ
Xform of P
![Page 5: CS 543: Computer Graphics Lecture 4 (Part I): 3D Affine …web.cs.wpi.edu/~emmanuel/courses/cs543/slides/lecture04_p1.pdf · Point Representation n Previously, point in 2D as column](https://reader031.vdocuments.mx/reader031/viewer/2022030407/5a86721f7f8b9a882e8ceceb/html5/thumbnails/5.jpg)
Recall: 3x3 2D Translation Matrix
''
yx
yx
y
x
tt
= +
1''
yx
1001001
y
x
tt
1yx
= *
§Previously, 2D :
![Page 6: CS 543: Computer Graphics Lecture 4 (Part I): 3D Affine …web.cs.wpi.edu/~emmanuel/courses/cs543/slides/lecture04_p1.pdf · Point Representation n Previously, point in 2D as column](https://reader031.vdocuments.mx/reader031/viewer/2022030407/5a86721f7f8b9a882e8ceceb/html5/thumbnails/6.jpg)
4x4 3D Translation Matrix
'''
zyx
zyx
z
y
x
ttt
= +
1'''
zyx
1000100010001
z
y
x
ttt
1zyx
= *
§Now, 3D :
§Where: x’= x.1 + y.0 + z.0 + tx.1 = x + tx, … etc
OpenGL:
gltranslated(tx,ty,tz)
![Page 7: CS 543: Computer Graphics Lecture 4 (Part I): 3D Affine …web.cs.wpi.edu/~emmanuel/courses/cs543/slides/lecture04_p1.pdf · Point Representation n Previously, point in 2D as column](https://reader031.vdocuments.mx/reader031/viewer/2022030407/5a86721f7f8b9a882e8ceceb/html5/thumbnails/7.jpg)
2D Scaling
§Scale: Alter object size by scaling factor (sx, sy). i.e
x’ = x . Sx y’ = y . Sy
(1,1)
(2,2) Sx = 2, Sy = 2
(2,2)
(4,4)
=
yx
SySx
yx
00
''
![Page 8: CS 543: Computer Graphics Lecture 4 (Part I): 3D Affine …web.cs.wpi.edu/~emmanuel/courses/cs543/slides/lecture04_p1.pdf · Point Representation n Previously, point in 2D as column](https://reader031.vdocuments.mx/reader031/viewer/2022030407/5a86721f7f8b9a882e8ceceb/html5/thumbnails/8.jpg)
Recall: 3x3 2D Scaling Matrix
=
yx
SySx
yx
00
''
∗
=
11000000
1''
yx
SySx
yx
![Page 9: CS 543: Computer Graphics Lecture 4 (Part I): 3D Affine …web.cs.wpi.edu/~emmanuel/courses/cs543/slides/lecture04_p1.pdf · Point Representation n Previously, point in 2D as column](https://reader031.vdocuments.mx/reader031/viewer/2022030407/5a86721f7f8b9a882e8ceceb/html5/thumbnails/9.jpg)
4x4 3D Scaling Matrix
∗
=
11000000
1''
yx
SySx
yx
∗
=
11000000000000
1'''
zyx
SS
S
zyx
z
y
x
•Example:
•If Sx = Sy = Sz = 0.5
•Can scale:
• big cube (sides = 1) to small cube ( sides = 0.5)
•2D: square, 3D cube
OpenGL:
glScaled(Sx,Sy,Sz)
![Page 10: CS 543: Computer Graphics Lecture 4 (Part I): 3D Affine …web.cs.wpi.edu/~emmanuel/courses/cs543/slides/lecture04_p1.pdf · Point Representation n Previously, point in 2D as column](https://reader031.vdocuments.mx/reader031/viewer/2022030407/5a86721f7f8b9a882e8ceceb/html5/thumbnails/10.jpg)
Example: OpenGL Table Leg
// define table leg//--------------------------------------------------------------------------
------void tableLeg(double thick, double len){
glPushMatrix();glTranslated(0, len/2, 0);glScaled(thick, len, thick);glutSolidCube(1.0);glPopMatrix();
}
![Page 11: CS 543: Computer Graphics Lecture 4 (Part I): 3D Affine …web.cs.wpi.edu/~emmanuel/courses/cs543/slides/lecture04_p1.pdf · Point Representation n Previously, point in 2D as column](https://reader031.vdocuments.mx/reader031/viewer/2022030407/5a86721f7f8b9a882e8ceceb/html5/thumbnails/11.jpg)
Recall: 3x3 2D Rotation Matrix
(x,y)
(x’,y’)
θ
φr
−=
yx
yx
)cos()sin()sin()cos(
''
θθθθ
−=
11000)cos()sin(0)sin()cos(
1''
yx
yx
θθθθ
![Page 12: CS 543: Computer Graphics Lecture 4 (Part I): 3D Affine …web.cs.wpi.edu/~emmanuel/courses/cs543/slides/lecture04_p1.pdf · Point Representation n Previously, point in 2D as column](https://reader031.vdocuments.mx/reader031/viewer/2022030407/5a86721f7f8b9a882e8ceceb/html5/thumbnails/12.jpg)
Rotating in 3D
n Cannot do mindless conversion like beforen Why?
n Rotate about what axis?n 3D rotation: about a defined axisn Different Xform matrix for:
• Rotation about x-axis• Rotation about y-axis• Rotation about z-axis
n New terminologyn X-roll: rotation about x-axisn Y-roll: rotation about y-axisn Z-roll: rotation about z-axis
![Page 13: CS 543: Computer Graphics Lecture 4 (Part I): 3D Affine …web.cs.wpi.edu/~emmanuel/courses/cs543/slides/lecture04_p1.pdf · Point Representation n Previously, point in 2D as column](https://reader031.vdocuments.mx/reader031/viewer/2022030407/5a86721f7f8b9a882e8ceceb/html5/thumbnails/13.jpg)
Rotating in 3D
n New terminologyn X-roll: rotation about x-axisn Y-roll: rotation about y-axisn Z-roll: rotation about z-axis
n Which way is +ve rotationn Look in –ve direction (into +ve arrow)n CCW is +ve rotation
x
y
z+
![Page 14: CS 543: Computer Graphics Lecture 4 (Part I): 3D Affine …web.cs.wpi.edu/~emmanuel/courses/cs543/slides/lecture04_p1.pdf · Point Representation n Previously, point in 2D as column](https://reader031.vdocuments.mx/reader031/viewer/2022030407/5a86721f7f8b9a882e8ceceb/html5/thumbnails/14.jpg)
Rotating in 3D
![Page 15: CS 543: Computer Graphics Lecture 4 (Part I): 3D Affine …web.cs.wpi.edu/~emmanuel/courses/cs543/slides/lecture04_p1.pdf · Point Representation n Previously, point in 2D as column](https://reader031.vdocuments.mx/reader031/viewer/2022030407/5a86721f7f8b9a882e8ceceb/html5/thumbnails/15.jpg)
Rotating in 3D
n For a rotation angle, β about an axisn Define:
( )βcos=c ( )βsin=s
( )
−
=
100000000001
cssc
Rx β
A x-roll:
OpenGL:
glrotated(θ, 1,0,0)
![Page 16: CS 543: Computer Graphics Lecture 4 (Part I): 3D Affine …web.cs.wpi.edu/~emmanuel/courses/cs543/slides/lecture04_p1.pdf · Point Representation n Previously, point in 2D as column](https://reader031.vdocuments.mx/reader031/viewer/2022030407/5a86721f7f8b9a882e8ceceb/html5/thumbnails/16.jpg)
Rotating in 3D
( )
−=
100000001000
cs
sc
Ry β
A y-roll:
( )
−
=
100001000000
cssc
Rz β
A z-roll:
Rules:
•Rotate row, column int. is 1
•Rest of row/col is 0
•c,s in rect pattern
OpenGL:
glrotated(θ, 0,1,0)
OpenGL:
glrotated(θ, 0,0,1)
![Page 17: CS 543: Computer Graphics Lecture 4 (Part I): 3D Affine …web.cs.wpi.edu/~emmanuel/courses/cs543/slides/lecture04_p1.pdf · Point Representation n Previously, point in 2D as column](https://reader031.vdocuments.mx/reader031/viewer/2022030407/5a86721f7f8b9a882e8ceceb/html5/thumbnails/17.jpg)
Example: Rotating in 3D
=
−=
1964.116.4
1413
100000001000
cs
sc
Q
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
E.g. first line: 3.c + 1.0 + 4.s + 1.0 = 4.6
![Page 18: CS 543: Computer Graphics Lecture 4 (Part I): 3D Affine …web.cs.wpi.edu/~emmanuel/courses/cs543/slides/lecture04_p1.pdf · Point Representation n Previously, point in 2D as column](https://reader031.vdocuments.mx/reader031/viewer/2022030407/5a86721f7f8b9a882e8ceceb/html5/thumbnails/18.jpg)
Matrix Multiplication Code
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.
=
11z
y
x
z
y
x
PPP
MQQQ
=
100034333231
24232221
14131211
mmmmmmmmmmmm
M
where
![Page 19: CS 543: Computer Graphics Lecture 4 (Part I): 3D Affine …web.cs.wpi.edu/~emmanuel/courses/cs543/slides/lecture04_p1.pdf · Point Representation n Previously, point in 2D as column](https://reader031.vdocuments.mx/reader031/viewer/2022030407/5a86721f7f8b9a882e8ceceb/html5/thumbnails/19.jpg)
Matrix Multiplication Code
n Outline of solution:n Declare P,Q as array:
• Double P[4], Q[4];
n Declare transform matrix as 2-dimensional array• Double M[4][4];
n Remember: C indexes from 0, not 1n 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]
n Cute way:• Use indexing, say i for outer loop, j for inner loop
![Page 20: CS 543: Computer Graphics Lecture 4 (Part I): 3D Affine …web.cs.wpi.edu/~emmanuel/courses/cs543/slides/lecture04_p1.pdf · Point Representation n Previously, point in 2D as column](https://reader031.vdocuments.mx/reader031/viewer/2022030407/5a86721f7f8b9a882e8ceceb/html5/thumbnails/20.jpg)
Matrix Multiplication Code
n Using loops looks like:n for(i=0;i<4;i++)
{temp = 0;for(j=0;j<4;j++){
temp += P[j]*M[i][j];}Q[i] = temp;
}
n Test matrice code rigorouslyn Use known results (or by hand) and plug into your code
![Page 21: CS 543: Computer Graphics Lecture 4 (Part I): 3D Affine …web.cs.wpi.edu/~emmanuel/courses/cs543/slides/lecture04_p1.pdf · Point Representation n Previously, point in 2D as column](https://reader031.vdocuments.mx/reader031/viewer/2022030407/5a86721f7f8b9a882e8ceceb/html5/thumbnails/21.jpg)
3D Rotation About Arbitrary Axis
n Arbitrary rotation axis (rx, ry, rz)n openGL: rotate(θ, rx, ry, rz)n Without openGL: a little hairy!!n Important: read Hill and Kelley, pg 220 - 223
x
z
y (rx, ry, rz)
![Page 22: CS 543: Computer Graphics Lecture 4 (Part I): 3D Affine …web.cs.wpi.edu/~emmanuel/courses/cs543/slides/lecture04_p1.pdf · Point Representation n Previously, point in 2D as column](https://reader031.vdocuments.mx/reader031/viewer/2022030407/5a86721f7f8b9a882e8ceceb/html5/thumbnails/22.jpg)
3D Rotation About Arbitrary Axis
n Can compose arbitrary rotation as combination of:n X-rolln Y-rolln Z-roll
)()()( 123 βββ xyz RRRM =
![Page 23: CS 543: Computer Graphics Lecture 4 (Part I): 3D Affine …web.cs.wpi.edu/~emmanuel/courses/cs543/slides/lecture04_p1.pdf · Point Representation n Previously, point in 2D as column](https://reader031.vdocuments.mx/reader031/viewer/2022030407/5a86721f7f8b9a882e8ceceb/html5/thumbnails/23.jpg)
3D Rotation About Arbitrary Axis
n Classic: use Euler’s theoremn Euler’s theorem: any sequence of rotations = one rotation
about some axisn Our approach:
n Want to rotate β about the axis u through origin and arbitrary point
n Use two rotations to align u and x-axisn Do x-roll through angle βn Negate two previous rotations to de-align u and x-axis
![Page 24: CS 543: Computer Graphics Lecture 4 (Part I): 3D Affine …web.cs.wpi.edu/~emmanuel/courses/cs543/slides/lecture04_p1.pdf · Point Representation n Previously, point in 2D as column](https://reader031.vdocuments.mx/reader031/viewer/2022030407/5a86721f7f8b9a882e8ceceb/html5/thumbnails/24.jpg)
3D Rotation About Arbitrary Axis
)()()()()()( θφβφθβ yzxzyu RRRRRR −−=
![Page 25: CS 543: Computer Graphics Lecture 4 (Part I): 3D Affine …web.cs.wpi.edu/~emmanuel/courses/cs543/slides/lecture04_p1.pdf · Point Representation n Previously, point in 2D as column](https://reader031.vdocuments.mx/reader031/viewer/2022030407/5a86721f7f8b9a882e8ceceb/html5/thumbnails/25.jpg)
Composing Transformation
n Composing transformation – applying several transforms in succession to form one overall transformation
n Example:M1 X M2 X M3 X P
where M1, M2, M3 are transform matrices applied to Pn Be careful with the ordern Matrix multiplication is not commutative
![Page 26: CS 543: Computer Graphics Lecture 4 (Part I): 3D Affine …web.cs.wpi.edu/~emmanuel/courses/cs543/slides/lecture04_p1.pdf · Point Representation n Previously, point in 2D as column](https://reader031.vdocuments.mx/reader031/viewer/2022030407/5a86721f7f8b9a882e8ceceb/html5/thumbnails/26.jpg)
References
n Hill, chapter 5.3