Pourquoi ?
Parce qu'une caméra représente une vue de projection.
Mais dans le cas d'une caméra 3D (caméra virtuelle), la caméra se déplace à la place du monde. J'ai fait une explication détaillée plus tard de cette réponse.
Comprendre mathématiquement
La projection se déplace dans l’espace et change d’orientation. La première chose à noter est que la projection souhaitée sur l'écran ne change pas avec la direction de la vue.
Pour cette raison, nous transformons d'autres choses pour obtenir la projection souhaitée.
Comprendre de http://opengl.org
Pour donner l’impression de déplacer la caméra, votre application OpenGL doit déplacer la scène avec l’inverse de la transformation de la caméra. en ce qui concerne OpenGL, il n'y a pas de caméra. Plus précisément, la caméra est toujours située à la coordonnée de l’œil (0, 0, 0)
Comprendre de http://open.gl
Vous souhaitez également partager les lignes suivantes de la partie View matrix de http://open.gl/transformations
Pour simuler une transformation de caméra, vous devez réellement transformer le monde avec l'inverse de cette transformation. Exemple: si vous souhaitez déplacer la caméra vers le haut, vous devez déplacer le monde vers le bas.
Comprendre par perspective
Dans le monde réel, nous voyons les choses d'une manière appelée "perspective".
La perspective fait référence au concept selon lequel les objets les plus éloignés semblent être plus petits que ceux qui sont plus proches de vous. La perspective signifie également que si vous êtes assis au milieu d'une route droite, vous voyez en réalité les frontières de la route comme deux lignes convergentes.
C'est la perspective. La perspective est essentielle dans les projets 3D. Sans perspective, le monde 3D ne semble pas réel.
Bien que cela puisse sembler naturel et évident, il est important de noter que lorsque vous créez un rendu 3D sur un ordinateur, vous essayez de simuler un monde 3D sur l'écran de l'ordinateur, qui est une surface 2D.
Imaginez que derrière l’écran de l’ordinateur se trouve une véritable scène en 3D et que vous la regardez à travers le «verre» de votre écran d’ordinateur. En utilisant la perspective, votre objectif est de créer un code qui restitue ce qui est "projeté" sur ce "verre" de votre écran comme s'il y avait ce monde 3D réel derrière l'écran. Le seul inconvénient est que ce monde 3D n'est pas réel… il ne s'agit que d'une simulation mathématique d'un monde 3D.
Ainsi, lorsque vous utilisez le rendu 3D pour simuler une scène en 3D, puis que vous la projetez sur la surface 2D de votre écran, le processus s'appelle projection en perspective.
Commencez par imaginer intuitivement ce que vous voulez réaliser. Si un objet est plus proche du spectateur, il doit sembler être plus gros. Si l'objet est plus éloigné, il doit sembler être plus petit. De même, si un objet s'éloigne du spectateur, en ligne droite, vous voulez qu'il converge vers le centre de l'écran, à mesure qu'il se déplace plus loin.
Traduire la perspective en maths
Lorsque vous visualisez l'illustration de la figure suivante, imaginez qu'un objet soit positionné dans votre scène 3D. Dans le monde 3D, la position de l'objet peut être décrite comme xW, yW, zW, en référence à un système de coordonnées 3D dont l'origine est située dans le point de vue. C'est là que l'objet est réellement positionné, dans la scène 3D au-delà de l'écran.
Alors que le spectateur regarde cet objet à l'écran, l'objet 3D est "projeté" vers une position 2D décrite comme xP et yP, qui fait référence au système de coordonnées 2D de l'écran (plan de projection).
Pour mettre ces valeurs dans une formule mathématique, je vais utiliser un système de coordonnées 3D pour les coordonnées du monde, où l'axe des x pointe vers la droite, y vers le haut et les points z positifs à l'intérieur de l'écran. L'origine 3D fait référence à l'emplacement de l'oeil du spectateur. Ainsi, le verre de l'écran est sur un plan orthogonal (à angle droit) à l'axe z, à un z que j'appellerai zProj.
Vous pouvez calculer les positions projetées xP et yP en divisant les positions mondiales xW et yW par zW, comme suit:
xP = K1 * xW / zW
yP = K2 * yW / zW
K1 et K2 sont des constantes dérivées de facteurs géométriques tels que le format de votre plan de projection (votre fenêtre) et le "champ de vision" de votre œil, qui prend en compte le degré de vision en grand angle.
Vous pouvez voir comment cette transformation simule la perspective. Les points situés près des côtés de l'écran sont repoussés vers le centre à mesure que la distance de l'œil (zW) augmente. Dans le même temps, les points proches du centre (0,0) sont beaucoup moins affectés par la distance de l’œil et restent proches du centre.
Cette division par z est la fameuse "division de perspective".
Maintenant, considérons qu'un objet dans la scène 3D est défini comme une série de sommets. Ainsi, en appliquant ce type de transformation à tous les sommets de la géométrie, vous vous assurez efficacement que l’objet se contractera s’il est plus éloigné du point de vue.
Autres cas importants
- Dans le cas d'une caméra 3D (caméra virtuelle), la caméra se déplace à la place du monde.
Pour mieux comprendre les caméras 3D, imaginez que vous réalisez un film. Vous devez créer une scène que vous souhaitez filmer et vous avez besoin d'un appareil photo. Pour obtenir le métrage, vous parcourez la scène avec votre appareil photo et photographiez les objets de la scène sous différents angles et points de vue.
Le même processus de tournage se produit avec une caméra 3D. Vous avez besoin d'une caméra "virtuelle", qui peut se déplacer autour de la scène "virtuelle" que vous avez créée.
Deux styles de prise de vue populaires consistent à regarder le monde à travers les yeux d'un personnage (également appelé caméra à la première personne) ou à diriger la caméra vers un personnage et à la garder en vue (caméra à la troisième personne).
Il s'agit du principe de base d'une caméra 3D: une caméra virtuelle que vous pouvez utiliser pour parcourir une scène 3D et restituer le métrage d'un point de vue spécifique.
Comprendre l'espace mondial et l'espace de vision
Pour coder ce type de comportement, vous allez restituer le contenu du monde 3D du point de vue de la caméra, et pas seulement du point de vue du système de coordonnées universelles, ou d'un autre point de vue fixe.
D'une manière générale, une scène 3D contient un ensemble de modèles 3D. Les modèles sont définis comme un ensemble de sommets et de triangles, référencés dans leur propre système de coordonnées. L'espace dans lequel les modèles sont définis est appelé espace modèle (ou local).
Après avoir placé les objets de modèle dans une scène 3D, vous allez transformer les sommets de ces modèles à l'aide d'une matrice de "transformation du monde". Chaque objet a sa propre matrice de monde qui définit où il se trouve et comment il est orienté.
Ce nouveau système de référence s'appelle "espace mondial" (ou espace global). Un moyen simple de le gérer consiste à associer une matrice de transformation du monde à chaque objet.
Pour implémenter le comportement d'une caméra 3D, vous devez effectuer des étapes supplémentaires. Vous ferez référence au monde — pas à l'origine du monde — mais au système de référence de la caméra 3D elle-même.
Une bonne stratégie consiste à traiter la caméra comme un objet 3D réel dans le monde 3D. Comme tout autre objet 3D, vous utilisez une matrice de "transformation du monde" pour placer la caméra à la position et l'orientation souhaitées dans le monde 3D. Cette matrice de transformation du monde de la caméra transforme l'objet de la caméra de la rotation initiale orientée vers l'avant (le long de l'axe z) en une position et une rotation du monde réel (xc, yc, zc).
La figure suivante montre les relations entre le système de coordonnées Monde (x, y, z) et le système de coordonnées Vue (caméra) (x ', y', z ').