Perspective OpenGL

 

x, y, z, w

Les vecteurs dans les shaders sous OpenGL sont en vec4, soit x, y, z et w.

x, y et z sont connus, il s'agit tout simplement des coordonnées dans l'espace (les classiques coordonnées cartésiennes).

Mais à quoi correspond le w ???

 

La perspective en dessin

 

Lorsque vous dessinez en 3D sur une feuille, vous utilisez généralement des points de fuites. cela le rendra plus réaliste !

Image non trouvée !

On constate que les lignes horizontales, verticales, ou celles qui "partent vers le fond" vont avoir une longueur qui sera proportionnelle avec la distance entre le point dessiné et le point de fuite.

 

La perspective grace à w

Et bien OpenGL fait de même pour produire une image 3D ! Il pourrait se contenter de coordonnées cartésiennes soit x, y et z, mais il utilise aussi ce w avant de déterminer la position des points sur l'écran.

On parlera de coordonnées homogènes (les explications en annexes sur ce terme).

Pour cela, OpenGL reprend les valeurs de x, y et z et les divise chacune par w.

Les nouvelles coordonnées cartésiennes seront donc:

(x / w, y / w, z / w)

Plus w sera grand, plus les points se rapprocheront du centre de l'écran qui est donc le point de fuite.

Vous pouvez donc vous aussi vous en servir pour afficher un objet en perspective, mais faîtes attention aux valeurs que vous passerez aux différents vertice, sinon, vous allez obtenir des choses bizarres à l'écran...

 

 

Annexes

Les points suivants A (1, 1, 1, 1), B (2, 2, 2, 2), C (3, 3, 3, 3), ... représentent en fait un seul et même point à l'écran (1,1,1): On parlera donc de coordonnées homogènes. (cf. August_Ferdinand_Möbius né en 1970 juste pour dire que ce n'est pas tout jeune ...)

vec4 permet donc de représenter des coordonnées homogènes.

Les coordonnées homogènes permettent de représenter des points à l'infini, il suffit de tendre w vers 0 ...