GAMES101 Lecture 04
GAMES101 Lecture 04
Lecture 4:
Transformation Cont.
http://www.cs.ucsb.edu/~lingqi/teaching/games101.html
Announcement
- Homogeneous coordinates
- Composite transform
- 3D transformations
GAMES101
CS184/284A 5 Lingqi Yan, UC Santa
RenBarbara
Ng
Use homogeneous coordinates again:
• 3D point = (x, y, z, 1)T
3D Transformations
• 3D vector = (x, y, z, 0)T
Use homogeneous coordinates again:
Use 4×4 matrices for affine transformations
• 3D point = (x, y, z, 1)T
⇥ ⇥ ⇥
• 3D vector ⇧ x
= (x,
y ⌃
y, z, a
0) T b c t x
⇧d e f ty ⌃ ⇧y ⌃
x
⇧ ⌃ = ⇧ ⌃·⇧ ⌃
⇤z ⌅ ⇤ g h i tz ⌅ ⇤ z ⌅
Use 4×4 matrices
1 for affine
0 0transformations
0 1 1
⇥ ⇥ ⇥
x a b c tx x
What’s the order?
⇧ ⌃ ⇧ ⌃ ⇧ ⌃
y d e f t y
Linear Transform
CS184/284A ⇧ ⌃
⇤z ⌅first
= or
⇧Translation first?
y ⌃·⇧ ⌃
⇤ g h i tz ⌅ ⇤ z ⌅
Ren Ng
1 0 0 0 1 1
Translation ⇥
1 0 0 tx
⇧0 1 0 ty ⌃
T(tx , ty , tz ) = ⇧
⇤0
⌃
0 1 tz ⌅
0 0 0 1
Coordinate Change
(Frame-to-world)
u v w o
F(u, v, w, o) =
0 0 0 1
CS184/284A Ren Ng
GAMES101 7 Lingqi Yan, UC Santa Barbara
3D Transformations
⇥ Rotation
1 0 0 0 around
⇧0 cos sin 0⌃ x-axis
Rx ( ) = ⇧
⇤0
⌃
sin cos 0⌅
x
0 0 0 1
⇥
cos 0 sin 0
⇧ 0 z
1 0 0⌃
Ry ( ) = ⇧
⇤ sin
⌃
0 cos 0⌅
0 0 0 1
⇥ Anything strange about Ry?
cos sin 0 0
⇧ sin cos 0 0⌃
Rz ( ) = ⇧
⇤ 0
⌃
0 1 0⌅
0 0 0 1
CS184/284A Ren Ng
GAMES101 8 Lingqi Yan, UC Santa Barbara
3D Rotations
CS184/284A Ren Ng
GAMES101 9 Lingqi Yan, UC Santa Barbara
Rodrigues’ Rotation Formula
• Viewing transformation
- View / Camera transformation
- Projection transformation
- Orthographic projection
- Perspective projection
- Position ~e
<latexit sha1_base64="fruLMXButdm+3hKupgnEySA42HE=">AAAB7nicbVBNS8NAEJ3Ur1q/oh69LBbBU0lE0GPRi8cK9gPaUDbbSbt0swm7m0IJ/RFePCji1d/jzX/jts1BWx8MPN6bYWZemAqujed9O6WNza3tnfJuZW//4PDIPT5p6SRTDJssEYnqhFSj4BKbhhuBnVQhjUOB7XB8P/fbE1SaJ/LJTFMMYjqUPOKMGiu1exNkOc76btWreQuQdeIXpAoFGn33qzdIWBajNExQrbu+l5ogp8pwJnBW6WUaU8rGdIhdSyWNUQf54twZubDKgESJsiUNWai/J3Iaaz2NQ9sZUzPSq95c/M/rZia6DXIu08ygZMtFUSaIScj8dzLgCpkRU0soU9zeStiIKsqMTahiQ/BXX14nraua79X8x+tq/a6IowxncA6X4MMN1OEBGtAEBmN4hld4c1LnxXl3PpatJaeYOYU/cD5/AJUEj7c=</latexit>
<latexit
Position
(assuming perp. to look-at) Loo
k-a
t di
rec
tion
==
(0, 0, 0) -Z
X
Mview in math? ~e
<latexit sha1_base64="fruLMXButdm+3hKupgnEySA42HE=">AAAB7nicbVBNS8NAEJ3Ur1q/oh69LBbBU0lE0GPRi8cK9gPaUDbbSbt0swm7m0IJ/RFePCji1d/jzX/jts1BWx8MPN6bYWZemAqujed9O6WNza3tnfJuZW//4PDIPT5p6SRTDJssEYnqhFSj4BKbhhuBnVQhjUOB7XB8P/fbE1SaJ/LJTFMMYjqUPOKMGiu1exNkOc76btWreQuQdeIXpAoFGn33qzdIWBajNExQrbu+l5ogp8pwJnBW6WUaU8rGdIhdSyWNUQf54twZubDKgESJsiUNWai/J3Iaaz2NQ9sZUzPSq95c/M/rZia6DXIu08ygZMtFUSaIScj8dzLgCpkRU0soU9zeStiIKsqMTahiQ/BXX14nraua79X8x+tq/a6IowxncA6X4MMN1OEBGtAEBmN4hld4c1LnxXl3PpatJaeYOYU/cD5/AJUEj7c=</latexit>
<latexit
- Translates e to origin
<latexit sha1_base64="JRmPpRc6+ziFmRSUNjVSJ5Dkido=">AAAB7nicbVDLSgNBEOz1GeMr6tHLYBA8hV0R9Bj04jGCeUCyhNnJbDJkdmaZ6RXCko/w4kERr36PN//GSbIHTSxoKKq66e6KUiks+v63t7a+sbm1Xdop7+7tHxxWjo5bVmeG8SbTUptORC2XQvEmCpS8kxpOk0jydjS+m/ntJ26s0OoRJykPEzpUIhaMopPavRHFfDjtV6p+zZ+DrJKgIFUo0OhXvnoDzbKEK2SSWtsN/BTDnBoUTPJpuZdZnlI2pkPedVTRhNswn587JedOGZBYG1cKyVz9PZHTxNpJErnOhOLILnsz8T+vm2F8E+ZCpRlyxRaL4kwS1GT2OxkIwxnKiSOUGeFuJWxEDWXoEiq7EILll1dJ67IW+LXg4apavy3iKMEpnMEFBHANdbiHBjSBwRie4RXevNR78d69j0XrmlfMnMAfeJ8/lmePuA==</latexit>
ĝ
- Rotates g to -Z
Y
- Rotates t to Y
- Rotates (g x t) To X
- Difficult to write! -Z
X
2 3
- Translate e to origin 1 0 0 xe
60 1 0 ye 7
Tview =6
40
7
0 1 ze 5
<latexit sha1_base64="7v4QSZEjspNepsEFl4IrOfaqQeg=">AAACVnicbZHPS8MwFMfTTt2cv6oevQSH4mWjFUEvwtCLxwnbFNZR0uxtBtO0JKk6y/5Jveif4kXMus7fDx58+bz3kpdvwoQzpV331bJLC4tL5cpydWV1bX3D2dzqqjiVFDo05rG8DokCzgR0NNMcrhMJJAo5XIW359P61R1IxWLR1uME+hEZCTZklGiDAidqB9kdg/vJqR/CiIksjIiW7GHi4X3sFll/CAD7fq7nvD7+YnNefwzgG8qxD2LweWjg1NyGmwf+K7xC1FARrcB58gcxTSMQmnKiVM9zE93PiNSMcphU/VRBQugtGUHPSEEiUP0st2WC9wwZ4GEsTQqNc/p9IiORUuMoNJ1mvxv1uzaF/9V6qR6e9DMmklSDoLOLhinHOsZTj/GASaCaj40gVDKzK6Y3RBKqzU9UjQne7yf/Fd3Dhuc2vMujWvOssKOCdtAuOkAeOkZNdIFaqIMoekZvlm2VrBfr3V60y7NW2ypmttGPsJ0Pd6epqQ==</latexit>
0 0 0 1
- Rotate g to -Z, t to Y, (g x t) To X
• Summary
- Transform objects together with the camera
• Viewing transformation
- View / Camera transformation
- Projection transformation
- Orthographic projection
- Perspective projection
- Orthographic projection
- Perspective projection
Orthographic Perspective
projection projection
https://stackoverflow.com/questions/36573283/from-perspective-picture-to-orthographic-picture
GAMES101 20 Lingqi Yan, UC Santa Barbara
Orthographic Projection
• A simple way of understanding
- Camera located at origin, looking at -Z, up at Y (looks familiar?)
- Drop Z coordinate
t f
y y y
n Translate Scale
b x x
l r x
z z z
t f
y y y
n Translate Scale
b x x
l r x
z z z
n Translate Scale
b x x
l r x
z z z
- FYI: that’s why OpenGL (a Graphics API) uses left hand coords.
t f
y y y
n Translate Scale
b x x
l r x
z z z
Image A
Plane Plane, or
of Pro
jection
A’
B
B’
Center of projection
(camera/eye location)
https://en.wikipedia.org/wiki/Parallel_(geometry)
Frustum Cuboid
n f n f
Y (x, y, z)
n 0 n 0
y = y x = x (similar to y’)
z
<latexit sha1_base64="gYCqVp7QCzxySMpbJ4utMPl9GkQ=">AAAB+HicbVBNS8NAEJ3Ur1o/GvXoZbGInkoigl6EohePFewHtKFstpt26WYTdjdCGvJLvHhQxKs/xZv/xm2bg7Y+GHi8N8PMPD/mTGnH+bZKa+sbm1vl7crO7t5+1T44bKsokYS2SMQj2fWxopwJ2tJMc9qNJcWhz2nHn9zN/M4TlYpF4lGnMfVCPBIsYARrIw3sanp20w8kJpnIs2meDuyaU3fmQKvELUgNCjQH9ld/GJEkpEITjpXquU6svQxLzQineaWfKBpjMsEj2jNU4JAqL5sfnqNTowxREElTQqO5+nsiw6FSaeibzhDrsVr2ZuJ/Xi/RwbWXMREnmgqyWBQkHOkIzVJAQyYp0Tw1BBPJzK2IjLGJQZusKiYEd/nlVdK+qLtO3X24rDVuizjKcAwncA4uXEED7qEJLSCQwDO8wps1tV6sd+tj0Vqyipkj+APr8wcmipNn</latexit>
z
<latexit sha1_base64="9Vy/9JhE+ej/RY4O2ZmdE3kknpU=">AAAB+HicbVBNS8NAEJ3Ur1o/GvXoZbGInkoigl6EohePFewHtKFstpt26WYTdjfSNuSXePGgiFd/ijf/jds2B219MPB4b4aZeX7MmdKO820V1tY3NreK26Wd3b39sn1w2FRRIgltkIhHsu1jRTkTtKGZ5rQdS4pDn9OWP7qb+a0nKhWLxKOexNQL8UCwgBGsjdSzy+Ozm24gMUlFlk6zcc+uOFVnDrRK3JxUIEe9Z391+xFJQio04VipjuvE2kux1IxwmpW6iaIxJiM8oB1DBQ6p8tL54Rk6NUofBZE0JTSaq78nUhwqNQl90xliPVTL3kz8z+skOrj2UibiRFNBFouChCMdoVkKqM8kJZpPDMFEMnMrIkNsYtAmq5IJwV1+eZU0L6quU3UfLiu12zyOIhzDCZyDC1dQg3uoQwMIJPAMr/BmTa0X6936WLQWrHzmCP7A+vwBI3STZQ==</latexit>
• In homogeneous coordinates,
0 1 0 1 mult. 0 1
x nx/z nx
By C B ny/z C by z B ny C
B C)B C == B C
@z A @unknownA @still unknownA
1 1 z
<latexit sha1_base64="nZO54NGfca8TDoXBiZdVBA1kZVc=">AAACrHicbVFNTxsxEPVuvyD9SuHIxWpUqb2ku6gSXJBQuXArIAKp4lXkdWYTK157Zc+WLKv8uv4Dbv03eJOoCgkjefz0ZubZM5MWSjqMon9B+OLlq9dvdnZbb9+9//Cx/WnvxpnSCugJo4ztp9yBkhp6KFFBv7DA81TBbTo9a+K3f8A6afQ1VgUkOR9rmUnB0VPD9l+Wwljqusg5WjmbzyhjtGrcfeNiBnr0P0jZlRxPkFtr7uhGoZ59X1Toankzz09sXpd6qs2dnj+jdnKyLbKUWBdwKJVilK4L3T8RGrY7UTdaGN0G8Qp0yMouhu0HNjKizEGjUNy5QRwVmNTcohQK5i1WOii4mPIxDDzUPAeX1Ithz+kXz4xoZqw/GumCXa+oee5clac+s+nAbcYa8rnYoMTsOKmlLkoELZYPZaWiaGizOTqSFgSqygMurPR/pWLCLRfo99vyQ4g3W94GN4fdOOrGlz86pz9X49ghB+Qz+UpickROyTm5ID0igm/Br6Af/A674XU4CJNlahisavbJEwuzR7Y51SQ=</latexit>
<latexit sha1_base64="qVcHsPCvwxEnxEvGQyxpiwV+lqE=">AAACRXicbVBNSwMxEM36WevXqkcvwaJ4KrtF0ItQ68VjBfsB3Vqy6bQNzWaXJCstS/+cF+/e/AdePCjiVbNtEds6MMPjvTdk8vyIM6Ud58VaWl5ZXVvPbGQ3t7Z3du29/aoKY0mhQkMeyrpPFHAmoKKZ5lCPJJDA51Dz+9epXnsAqVgo7vQwgmZAuoJ1GCXaUC3b83zoMpFEAdGSDUYOPsFpX5kueSDav8qccYA9Dw/TIdLhznjxJcbivtCyc07eGRdeBO4U5NC0yi372WuHNA5AaMqJUg3XiXQzIVIzymGU9WIFEaF90oWGgYIEoJrJOIURPjZMG3dCaVpoPGb/biQkUGoY+MZpzuypeS0l/9Mase5cNBMmoliDoJOHOjHHOsRppLjNJFDNhwYQKpm5FdMekYRqE3zWhODOf3kRVAt518m7t2e5YmkaRwYdoiN0ilx0joroBpVRBVH0iF7RO/qwnqw369P6mliXrOnOAZop6/sHM0SwRw==</latexit>
1
GAMES101 34 Lingqi Yan, UC Santa Barbara
Perspective Projection
• What do we have now?
0 1
x
By C
0 0 A B B @n A
C = n2 An + B = n
<latexit sha1_base64="cV93bogGcvzIGlyEVosDDkQywA8=">AAAB83icbVDLSgNBEOz1GeMr6tHLYBAEIewGQS9CjBePEcwDkjXMTnqTIbOzy8ysEEJ+w4sHRbz6M978GyfJHjSxoKGo6qa7K0gE18Z1v52V1bX1jc3cVn57Z3dvv3Bw2NBxqhjWWSxi1QqoRsEl1g03AluJQhoFApvB8HbqN59QaR7LBzNK0I9oX/KQM2qs1LmR5JxUyTWRj+VuoeiW3BnIMvEyUoQMtW7hq9OLWRqhNExQrduemxh/TJXhTOAk30k1JpQNaR/blkoaofbHs5sn5NQqPRLGypY0ZKb+nhjTSOtRFNjOiJqBXvSm4n9eOzXhlT/mMkkNSjZfFKaCmJhMAyA9rpAZMbKEMsXtrYQNqKLM2JjyNgRv8eVl0iiXPLfk3V8UK9UsjhwcwwmcgQeXUIE7qEEdGCTwDK/w5qTOi/PufMxbV5xs5gj+wPn8ASPyj8k=</latexit>
2
1 <latexit sha1_base64="qVcHsPCvwxEnxEvGQyxpiwV+lqE=">AAACRXicbVBNSwMxEM36WevXqkcvwaJ4KrtF0ItQ68VjBfsB3Vqy6bQNzWaXJCstS/+cF+/e/AdePCjiVbNtEds6MMPjvTdk8vyIM6Ud58VaWl5ZXVvPbGQ3t7Z3du29/aoKY0mhQkMeyrpPFHAmoKKZ5lCPJJDA51Dz+9epXnsAqVgo7vQwgmZAuoJ1GCXaUC3b83zoMpFEAdGSDUYOPsFpX5kueSDav8qccYA9Dw/TIdLhznjxJcbivtCyc07eGRdeBO4U5NC0yi372WuHNA5AaMqJUg3XiXQzIVIzymGU9WIFEaF90oWGgYIEoJrJOIURPjZMG3dCaVpoPGb/biQkUGoY+MZpzuypeS0l/9Mase5cNBMmoliDoJOHOjHHOsRppLjNJFDNhwYQKpm5FdMekYRqE3zWhODOf3kRVAt518m7t2e5YmkaRwYdoiN0ilx0joroBpVRBVH0iF7RO/qwnqw369P6mliXrOnOAZop6/sHM0SwRw==</latexit>
1 1 f
<latexit sha1_base64="m2OuDPSbSe1+rLBFqELXXuZdYDk=">AAACgXiclVFNSwMxEM1u/aj1q+rRS7AKerDsFkFBCkUvHqtYW+jWkk1n29Bsdkmyaln6P/xd3vwzYrotYq0IDmTyeG8emcz4MWdKO867ZeeWlldW82uF9Y3Nre3izu6DihJJoUEjHsmWTxRwJqChmebQiiWQ0OfQ9IfXE735BFKxSNzrUQydkPQFCxgl2lDd4qvnQ5+JNA6Jluxl7GDPw1kKJsn1QPS+ROzdsf5AEymjZ/wvY7WK/zA8VrJrztItlpyykwVeBO4MlNAs6t3im9eLaBKC0JQTpdquE+tOSqRmlMO44CUKYkKHpA9tAwUJQXXSbIJjfGSYHg4iaY7QOGO/O1ISKjUKfVNp+huon9qE/E1rJzq46KRMxIkGQacPBQnHOsKTdeAek0A1HxlAqGSmV0wHRBKqzdIKZgjuzy8vgodK2XXK7u1ZqXY1G0ce7aMDdIxcdI5q6AbVUQNR9GEdWqdW2c7ZJ7ZjV6altjXz7KG5sC8/AUJ+wG4=</latexit>
An + B = n2
<latexit sha1_base64="cV93bogGcvzIGlyEVosDDkQywA8=">AAAB83icbVDLSgNBEOz1GeMr6tHLYBAEIewGQS9CjBePEcwDkjXMTnqTIbOzy8ysEEJ+w4sHRbz6M978GyfJHjSxoKGo6qa7K0gE18Z1v52V1bX1jc3cVn57Z3dvv3Bw2NBxqhjWWSxi1QqoRsEl1g03AluJQhoFApvB8HbqN59QaR7LBzNK0I9oX/KQM2qs1LmR5JxUyTWRj+VuoeiW3BnIMvEyUoQMtW7hq9OLWRqhNExQrduemxh/TJXhTOAk30k1JpQNaR/blkoaofbHs5sn5NQqPRLGypY0ZKb+nhjTSOtRFNjOiJqBXvSm4n9eOzXhlT/mMkkNSjZfFKaCmJhMAyA9rpAZMbKEMsXtrYQNqKLM2JjyNgRv8eVl0iiXPLfk3V8UK9UsjhwcwwmcgQeXUIE7qEEdGCTwDK/w5qTOi/PufMxbV5xs5gj+wPn8ASPyj8k=</latexit>
A=n+f
<latexit sha1_base64="1zIaFRyhT2WN+k3aHKqzTsYGb10=">AAAB8HicbVDLSgNBEOz1GeMr6tHLYBAEIeyKoBch6sVjBPOQZAmzk9lkyDyWmVkhLPkKLx4U8ernePNvnCR70MSChqKqm+6uKOHMWN//9paWV1bX1gsbxc2t7Z3d0t5+w6hUE1oniivdirChnElat8xy2ko0xSLitBkNbyd+84lqw5R8sKOEhgL3JYsZwdZJj9foCkl0iuJuqexX/CnQIglyUoYctW7pq9NTJBVUWsKxMe3AT2yYYW0Z4XRc7KSGJpgMcZ+2HZVYUBNm04PH6NgpPRQr7UpaNFV/T2RYGDMSkesU2A7MvDcR//PaqY0vw4zJJLVUktmiOOXIKjT5HvWYpsTykSOYaOZuRWSANSbWZVR0IQTzLy+Sxlkl8CvB/Xm5epPHUYBDOIITCOACqnAHNagDAQHP8ApvnvZevHfvY9a65OUzB/AH3ucPYuWO0Q==</latexit>
2 B = nf
Af + B = f <latexit sha1_base64="dUsWxJ1iy60PPvO5Ug0Huo9Tni8=">AAAB83icbVDLSgNBEOz1GeMr6tHLYBAEIewGQS9CjBePEcwDkjXMTnqTIbOzy8ysEEJ+w4sHRbz6M978GyfJHjSxoKGo6qa7K0gE18Z1v52V1bX1jc3cVn57Z3dvv3Bw2NBxqhjWWSxi1QqoRsEl1g03AluJQhoFApvB8HbqN59QaR7LBzNK0I9oX/KQM2qs1LkJyTmpkmsSPpa7haJbcmcgy8TLSBEy1LqFr04vZmmE0jBBtW57bmL8MVWGM4GTfCfVmFA2pH1sWypphNofz26ekFOr9EgYK1vSkJn6e2JMI61HUWA7I2oGetGbiv957dSEV/6YyyQ1KNl8UZgKYmIyDYD0uEJmxMgSyhS3txI2oIoyY2PK2xC8xZeXSaNc8tySd39RrFSzOHJwDCdwBh5cQgXuoAZ1YJDAM7zCm5M6L8678zFvXXGymSP4A+fzBwtSj7k=</latexit>
<latexit sha1_base64="Df63RBUG32geAUdl7q2iGx/W34A=">AAAB7nicbVBNS8NAEJ3Ur1q/qh69LBbBiyURQS9CqRePFewHtKFstpN26WYTdjdCCf0RXjwo4tXf481/47bNQVsfDDzem2FmXpAIro3rfjuFtfWNza3idmlnd2//oHx41NJxqhg2WSxi1QmoRsElNg03AjuJQhoFAtvB+G7mt59QaR7LRzNJ0I/oUPKQM2qs1K6TW3Ihw3654lbdOcgq8XJSgRyNfvmrN4hZGqE0TFCtu56bGD+jynAmcFrqpRoTysZ0iF1LJY1Q+9n83Ck5s8qAhLGyJQ2Zq78nMhppPYkC2xlRM9LL3kz8z+umJrzxMy6T1KBki0VhKoiJyex3MuAKmRETSyhT3N5K2IgqyoxNqGRD8JZfXiWty6rnVr2Hq0qtnsdRhBM4hXPw4BpqcA8NaAKDMTzDK7w5ifPivDsfi9aCk88cwx84nz+5RI6A</latexit>
• What’s next?
- Do orthographic projection (Mortho) to finish
- Mpersp = Mortho Mpersp!ortho <latexit sha1_base64="WpPNOtMiJjLpI1J0etlrsOBg8DM=">AAACFnicbZDLSgMxFIYz9VbrrerSTbAIbiwzIuhGKLpxI1SwF2hLyaSZTmgmGZIzShnmKdz4Km5cKOJW3Pk2phdBWw8EPv7/HE7O78eCG3DdLye3sLi0vJJfLaytb2xuFbd36kYlmrIaVULppk8ME1yyGnAQrBlrRiJfsIY/uBz5jTumDVfyFoYx60SkL3nAKQErdYtH1900tn6cnVtSGkKV/UhtzfshEK3VPZ443WLJLbvjwvPgTaGEplXtFj/bPUWTiEmgghjT8twYOinRwKlgWaGdGBYTOiB91rIoScRMJx2fleEDq/RwoLR9EvBY/T2RksiYYeTbzohAaGa9kfif10ogOOukXMYJMEkni4JEYFB4lBHucc0oiKEFQjW3f8U0JJpQsLEUbAje7MnzUD8ue27ZuzkpVS6mceTRHtpHh8hDp6iCrlAV1RBFD+gJvaBX59F5dt6c90lrzpnO7KI/5Xx8A9QUoQc=</latexit>