A

Coordonnées homogènes : h₀, h₁ et l'effet de z′

Un carré 2D flotte dans le plan z = 1. La matrice 3×3 le cisaille selon z (h₀, h₁ en bas des deux premières colonnes), puis on re-projette en divisant par z′. Tournez la scène 3D : les deux flèches colorées sont les deux premières colonnes.
z′ = 1 + 0.200·x

Matrice 3×3 (3ᵉ ligne = profondeur)

1.000
0.000
0.000
0.000
1.000
0.000
0.200
0.000
1
colonnes = images de e₁, e₂, e₃  ·  h₀ = ∂z′/∂x, h₁ = ∂z′/∂y
0.000
0.000
c et f sont les cases a₁₃ et a₂₃ : la translation de la matrice (3ᵉ colonne), appliquée avant la division par z′.
0.200
0.000
0.00
0.00

Profondeur z′ aux 4 coins du carré

A0.880—
B1.120—
C1.120—
D0.880—
z′ min / max0.880 / 1.120
—

Fuite (points et droite)

point de fuite de la direction x—
point de fuite de la direction y—
droite de fuite de l'image—
ligne z′ = 0 (plan de l'image)—

La même transformation vue depuis le carré : M·T

1.000
0.000
0.000
0.000
1.000
0.000
0.200
0.000
1.000
T = translation (x₀, y₀) : la matrice écrite dans le repère du carré. Sa 3ᵉ colonne est l'image de l'origine du carré, (x₀, y₀, 1 + h₀x₀ + h₁y₀) quand la partie affine est l'identité.
z′ au centre du carré (case a₃₃)1.000
écart de profondeur avec (c, f)0.000
Déplacer le carré ne change pas M (l'opérateur) : cela change M·p (le résultat). Mais dans le repère du carré, la 3ᵉ colonne de M·T suit x₀ et y₀ — et son écart avec la translation (c, f) vaut exactement h₀x₀ + h₁y₀, le terme de profondeur que (c, f) ne produit pas.
z′ > 1 — l'image se contracte vers l'origine
0 < z′ < 1 — l'image se dilate
z′ < 0 — derrière l'œil : image renversée
z′ = 0 — l'image part à l'infini
z′ = 1 — profondeur inchangée
droite de fuite de l'image (par les 2 colonnes)
colonne 1   colonne 2
Pourquoi ces deux colonnes ? Les colonnes d'une matrice sont les images des vecteurs de base : M·e₁, M·e₂, M·e₃. Or M·(x,y,1) = x·(colonne 1) + y·(colonne 2) + 1·(colonne 3), donc sa troisième composante — la profondeur z′ — vaut x·h₀ + y·h₁ + 1·1 : elle ne dépend que des hauteurs des colonnes. Attention au niveau où l'on se place : sur un vecteur u = (x,y,z) de ℝ³, h₀ et h₁ ne touchent que la 3ᵉ composante — M·u = (a x + b y + c z, d x + e y + f z, h₀x + h₁y + z) : les deux premières les ignorent. Ils ne modifient les x et y de l'image que par la division par z′ (facteur 1/z′). Les six autres coefficients ne déterminent que X et Y : ils forment la partie affine de l'homographie, laquelle n'est affine que si h₀ = h₁ = 0. Tout l'effet de perspective tient donc dans h₀ et h₁ : ce sont les paramètres de raccourcissement perspectif. La 3ᵉ colonne est l'image de e₃ = (0,0,1), c'est-à-dire de l'origine du plan : sa translation (c, f). Le dernier coefficient (1) est une convention de normalisation : multiplier toute la matrice par λ ne change pas la transformation, donc on peut toujours ramener ce coefficient à 1 (en divisant toute la matrice par w) — et c'est de ce choix que dépend le signe de z′.

Deux translations à ne pas confondre. Déplacer le carré (x₀, y₀) change le résultat M·p, jamais M : la matrice est l'opérateur, le carré l'opérande. En revanche, si on écrit la transformation dans le repère du carré, la matrice devient M·T(x₀,y₀) et sa 3ᵉ colonne suit x₀ et y₀ : (x₀, y₀, 1 + h₀x₀ + h₁y₀) quand la partie affine est l'identité. Enfin (c, f) n'est pas la même translation : elle s'ajoute à (X, Y) avant la division, donc l'image se déplace de (c, f)/z′ et z′ ne change pas, tandis que déplacer l'objet change z′ dès que h₀ ou h₁ ≠ 0. L'écart entre les deux vaut exactement h₀x₀ + h₁y₀ : c'est le terme de profondeur que (c, f) ne produit pas.
AVANT — le plan de l'image (z = 1) et sa carte de profondeur z′
—
APRÈS — re-projection (division par z′) : l'effet de fuite
—