IFT3355: Infographie Projections © Pierre Poulin, Derek Nowrouzezahrai Dép. I.R.O. Université de Montréal
IFT3355: InfographieProjections
© Pierre Poulin, Derek Nowrouzezahrai
Dép. I.R.O.
Université de Montréal
2D et 3D
Monde en 3D Affichage en 2D
reconstruction(vision par ordinateur)
projectionclipping par la
pyramide de vuetransformationfenêtre-clôture
rendu(infographie)
Projecteurs
• Projection réduit le domaine– typiquement en infographie, n=3 et m=2
• Un projecteur est un segment reliant à un centre de projection
nmP mnn <ℜ→ℜ∈ où
nP
Parallèle Perspective
Projecteurs
• L’intersection d’un projecteur avec la surface de projection correspond à
• Lorsque cette surface est planaire, on parle de projection planaire
• Quelques exemples de projections non-planaires– oeil de poisson, projection omnimax, carte du
monde
mP
Projection planaire
• On divise les projections planaires en– projection parallèle– projection perspective
Projection parallèle
• Centre de projection est à l’infini• Direction de projection
• Projecteurs sont parallèles entre eux• Lignes parallèles en 3D demeurent parallèles après
projection• Angles entre les lignes peuvent changer
⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡
−−−
=⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡
−⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡
01112
12
12
1
1
1
2
2
2
zzyyxx
zyx
zyx
direction oupoint à l’infini
Projection perspective
• Centre de projection est à une distance finie
• Taille d’un objet augmente lorsque la distance au centre de projection diminue (perspective foreshortening)
• Lignes parallèles en 3D ne sont plus parallèles après projection
• Si le centre de projection est déplacé à l’infini, on obtient une projection parallèle
Projection perspective simple
Z
Y
centre deprojection
plan deprojection
d
),,( zyxP
),,( dyxP ppp
),,0( zyP
Xd
),0,( zxP
Décomposition selon XZ et YZ
),,0( zyP
),,0( dyP pp
Z
Y
dcentre deprojection
),0,( zxP
),0,( dxP pp
Z
X
dcentre deprojection
dzp
p yy
z
y
d
y== :
Règle des triangles semblables:
dzp
p xx
z
x
d
x== :
Matrice de base de projection
€
x p
y p
d
1
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
=
x
y
zz
d
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
=
1 0 0 0
0 1 0 0
0 0 1 0
0 0 1d 0
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
x
y
z
1
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
Le facteur sera utilisé pour normaliserdans le cadre des coordonnées homogènes
dz
Plan de projection à z=0
),0,( zxP
),0,( dxP pp
Z
X
d
centre deprojection
),0,( dzxP −
)0,0,( pp xP
Z
X
d−
centre deprojection
Plan de projection à z=0
€
x p
y p
0
1
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
=
x
y
0z
d +1
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
=
1 0 0 0
0 1 0 0
0 0 0 0
0 0 1d 1
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
x
y
z
1
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
€
T(0,0,d) M proj T(0,0,−d)
Lorsque d est à l’infini, on obtient une projection parallèle.Si la direction de projection est parallèle à la normale du plan,on parle de projection orthographique. Sinon on parle deprojection oblique.
Pyramide de vue
1. Clipping avec les six plans définissant le volume de vue
2. Projection des survivants au clipping sur la fenêtre
3. Transformations en coordonnées d’affichage
centre deprojection volume
de vue
arrière-planavant-plan
Volume de vue canonique
• Le clipping avec des plans arbitraires peut être coûteux, alors on transforme la pyramide de vue dans une forme canonique
- Transforme des points qui pourraient être clippés
+ Clipping sera simplifié
Z
X ou Y
-1
1
-1 0
arrière-planavant-plan
Par
allè
le
Z
X ou Y
-1
1
-1 0
arrière-plan
avant-plan
Per
spec
tive
Nomenclature
• VRP: view reference point– point sur le plan de vue
• VPN: view-plane normal– normale du plan de vue où repose la fenêtre 3D
• VUP: view up vector– vecteur 3D d’alignement vertical de la fenêtre 3D
• PRP: projection reference point– point par lequel passent tous les projecteurs– ce point peut être à l’infini– DOP = (CW - PRP): direction of projection
• CW: center of the window– centre de la fenêtre rectangulaire
Nomenclature
plan de vue
VRP
VPN
( )minmin ,vu
( )maxmax ,vuCW
PRP
VUP
n
v
u
Espaces 3D caméra et 2D image
u
n
VUP
VUP v
VRP
plan de vue
u
v),( maxmax vu
),( minmin vu
CW
3D 2D
VRP
Projection parallèle: systèmes de coordonnées
u
v
n
PRP
CW
VRP
DOP
Projection parallèle: configuration finale
(1,0,0)
(0,1,0)
(-1,0,0)
(0,-1,0)
(0,0,-1)
Transformations pour une projection parallèle
1. Translation du point de référence VRP du plan de vue vers l’origine
2. Alignement de la fenêtre tel que
)( VRPT −
€
A =
r1x r2x r3x 0
r1y r2y r3y 0
r1z r2z r3z 0
0 0 0 1
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
€
Rz :VPN → Z (r1z,r2z,r3z ) =VPN
VPN
Rx : u → X (r1x,r2x,r3x ) =VUP × Rz
VUP × Rz
Ry : v →Y (r1y,r2y,r3y ) = Rz × Rx
Transformations pour une projection parallèle
3. Cisaillement pour que la direction de projection soit parallèle à l’axe des Z
€
dopx
dopy
dopz
0
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
=
umax + umin
2vmax + vmin
20
1
⎡
⎣
⎢ ⎢ ⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥ ⎥ ⎥
−
prpu
prpv
prpn
1
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
Z
X ou Y
0
dop
⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡
⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡
=⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡
010000100010001
0
00
dopzdopydopx
shyshx
dopz
dopz
dopyshy
dopz
dopxshx
−=
−=
Z
X ou Y
maxmaxou vu
minminou vuFB
Transformations pour une projection parallèle
4. Translation et changement d’échelle sous forme canonique
€
T − umax + umin( )
2,− vmax + vmin( )
2,−F
⎛
⎝ ⎜
⎞
⎠ ⎟ et S
2
umax − umin
,2
vmax − vmin
,1
F − B
⎛
⎝ ⎜
⎞
⎠ ⎟
)( parparparpar VRPTAShTSN −=
Z
X ou Y
1+
1−1−
Projection perspective: systèmes de coordonnées
u
v
n
PRP
CW
VRP
Projection perspective: configuration finale
(-1,1,-1)
(-1,-1,-1) (1,-1,-1)
(1,1,-1)
(0,0,0)
Transformations pour une projection perspective
1. Translation du point de référence VRP du plan de vue vers l’origine
2. Alignement de la fenêtre tel que
)( VRPT −
€
A =
r1x r2x r3x 0
r1y r2y r3y 0
r1z r2z r3z 0
0 0 0 1
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
€
Rz :VPN → Z (r1z,r2z,r3z ) =VPN
VPN
Rx : u → X (r1x,r2x,r3x ) =VUP × Rz
VUP × Rz
Ry : v →Y (r1y,r2y,r3y ) = Rz × Rx
Transformations pour une projection perspective
3. Translation du centre de projection vers l’origine
4. Cisaillement pour que la ligne centrale (PRP-CW) s’aligne sur l’axe Z
)( PRPT −
€
0
0
dopz
0
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
=
1 0 shx 0
0 1 shy 0
0 0 1 0
0 0 0 1
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
dopx
dopy
dopz
0
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
dopz
dopyshy
dopz
dopxshx
−=
−=
Z
X ou Y
0
dopCW
Transformations pour une projection perspective
5. Changement d’échelle sous forme canonique
Z
X (ou Y)
0CW
( )2
minmax uux
−=
( )2
minmax uux
−−=
zpvr ′
€
pente = ±1 → umax − umin( )
2= vr ′ p z
€
S −2vr ′ p z
umax − umin
,−2vr ′ p z
vmax − vmin
,1 ⎛
⎝ ⎜
⎞
⎠ ⎟
Transformations pour une projection perspective
5. Changement d’échelle sous forme canonique
Z
X (ou Y)
0CW
zpvr ′Fpvr z +′
Bpvr z +′
€
S −1
vr ′ p z + B,
−1
vr ′ p z + B,
−1
vr ′ p z + B
⎛
⎝ ⎜
⎞
⎠ ⎟
)( )( perperper VRPTAPRPTShSN −−=
zpvr ′
zpvr ′−
€
vr ′ p z + B → −1
Démonstration Live
http://pixel.cs.vt.edu/courses/cs4204.html
Transformation sous une forme canonique
Z
X (ou Y)
0
minz
1−1+
1−
Z
X (ou Y)
0
1−1+
1−
€
1 0 0 0
0 1 0 0
0 0 11+zmin
−zmin
1+zmin
0 0 −1 0
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
pour zmin ≠ −1
Clipping contre la forme canonique
• Cohen-Sutherland en 3D (6 bits)
0 ; 1
1 ; 1
1 ; 1
>−<>−<>−<
zzyyxx
Projection orthographique selon Shirley et al.
l r
t
bn
f-1 +1
-1
-1
+1
+1
Volume de vue orthographique Volume de vue canonique
€
S 2r−l( )
, 2t−b( )
, 2n− f( )( )
Notes: oeil regarde vers -Z ; le haut est +Y ; n > f
€
T − l +r( )2 , − b +t( )
2 , − n + f( )2( )
Projection orthographique
€
Mortho =
nx
2 0 0 nx −12
0ny
2 0ny −1
2
0 0 1 0
0 0 0 1
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
2r−l( )
0 0 0
0 2t−b( )
0 0
0 0 2n− f( )
0
0 0 0 1
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
1 0 0 − l +r( )2
0 1 0 − b +t( )2
0 0 1 − n + f( )2
0 0 0 1
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
Image de pixelsOrigine au coin inférieur gauche
€
nx × ny
Projection orthographique avec vue arbitraire
u
v
we : position de vueg : direction de vuet : direction du haut
€
w =−g
g
u =t × w
t × w
v = w × u
€
Mv =
xu yu zu 0
xv yv zv 0
xw yw zw 0
0 0 0 1
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
1 0 0 −xe
0 1 0 −ye
0 0 1 −ze
0 0 0 1
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
€
M proj = MorthoMv
eg t
Projection perspective
x
y
z
x
y
z
€
l,b,n( ) €
r, t, f( )
distortion non-linéaire des coordonnées zmais conserve l’ordre en z pour
€
n ≤ z ≤ f€
x
y
z n + fn − f
zn
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
→
nxz
nyz
n + f − fnz
1
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
€
z = n → M persp → z = n
z = f → M persp → z = f
Propriété intéressante:
€
M persp =
1 0 0 0
0 1 0 0
0 0 n + fn − f
0 0 1n 0
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
une matrice parmiplusieurs…
Manipulations de la matrice perspective
€
M(hp) = (hM) p = Mp⇒ nM persp = M persp =
n 0 0 0
0 n 0 0
0 0 n + f − fn
0 0 1 0
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
€
M persp−1 =
1n 0 0 0
0 1n 0 0
0 0 0 1
0 0 − 1fn
n + ffn
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
€
picking : xs, ys,zs( ) → x, y,z( )
€
nf( )M persp−1 = M persp
−1 =
f 0 0 0
0 f 0 0
0 0 0 fn
0 0 −1 n + f
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
Variations sur la matrice de projection
€
M = MorthoM persp( )Mv
matrice de projection
€
M proj =
2nr−l 0 l +r
l−r 0
0 2nt−b
b +tb−t 0
0 0 f +nn− f
2 fnf −n
0 0 1 0
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
€
MOpenGL =
2 n
r−l 0 l +rl−r 0
0 2 n
t−bb +tb−t 0
0 0 f + n
n − f
2 f n
n − f
0 0 −1 0
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
Simplifications dues au field-of-view
Si on regarde au centre de la fenêtre
€
l = −r
b = −t
Si le ratio des pixels sont égaux
€
nx
ny
=r
t
Spécifier alors laisse un seul degré de liberté, le field-of-view
€
nx,ny
€
tgθ
2
⎛
⎝ ⎜
⎞
⎠ ⎟=
t
n
€
θ2