Une projection 3D est une transformation mathématique utilisée en synthèse d'image 3D pour faire une perspective (projeter des points en trois dimensions sur un plan en deux dimensions). Elle est souvent utilisée pour simuler la relation entre une caméra et son sujet. La projection 3D est souvent la première étape dans le processus de dessin d'objets 3D sur un écran informatique, processus connu sous le nom de rendu. Les algorithmes suivants étaient très employés dans les premières simulations sur ordinateur et les jeux vidéo, et le sont toujours avec quelques grosses modifications pour chaque cas particulier. Cet article ne décrit que le cas le plus simple, le plus général.
Les données utilisées pour dessiner les objets sont en général stockées sous la forme de collections de points, liés ensemble en triangles. Chaque point est une série de trois nombres, représentant les coordonnées X, Y, et Z du point, relativement a l'origine de l'objet. Chaque triangle est une série de trois points, ou trois index de points. En plus de cela, l'objet a trois coordonnées X,Y,Z, et trois valeurs représentant ses angles de rotation. Cela permet de gérer sa position et sa rotation, toutes deux relatives à un « monde ». Pour finir, l'observateur (le terme caméra est celui communément admis) : la caméra a elle aussi trois coordonnées X,Y,Z pour sa position, et trois angles pour sa rotation. Toutes ces données sont en général stockées sous forme de nombres flottants, même si beaucoup de programmes les convertissent en nombres entiers, pour accélérer les calculs.
Voir Perspective axonométrique > Projection orthogonale en synthèse d'image.
Une formule simplifiée permet de calculer les coordonnées à l'écran d'un point.
2D.X = 3D.X - ((DX / (3D.Z + Distance)) * 3D.X)
2D.Y = 3D.Y - ((DY / (3D.Z + Distance)) * 3D.Y)
où 2D.X
et 2D.Y
sont les coordonnées finales projetées sur l'écran, 3D.X
, 3D.Y
, et 3D.Z
les coordonnées du point à projeter, Distance
une constante, et DX
et DY
la distance respectivement en X
et Y
entre la caméra et le point. On écrit encore plus simplement :
2D.X = 3D.X / (3D.Z * fov)
2D.Y = 3D.Y / (3D.Z * fov)
Cette formule est mathématiquement incorrecte mais donne de bons résultats à moindre coût. Si fov
vaut 1, nous aurons une projection isométrique, sans notion de profondeur.