Pour les jeux de sprites 2D, je peux comprendre que les sprites se déplacent sur les axes X et Y. Cependant, pour les jeux 3D, comment les moteurs de jeu calculent-ils comment rendre un environnement 3D sur un écran d'ordinateur 2D plat?
9
Math.PI
, beaucoup.Réponses:
Les sprites 3D obtiennent un nouvel axe Z qui stocke la profondeur, la taille de l'échelle et les mouvements dans le plan X / Y. Un sprite plus éloigné a une valeur Z plus élevée. Maintenant, divisez la taille du sprite et les mouvements des axes X / Y par l'axe Z. Comme d'autres l'ont noté, il s'agit d'une projection en perspective 3D . Voici la meilleure illustration que j'ai pu trouver:
Cela a du sens conceptuellement parce que les choses qui sont plus éloignées semblent plus petites. Leurs mouvements apparents semblent également plus petits.
De plus, les objets proches doivent être dessinés au-dessus des objets éloignés. Encore une fois, cela a un sens conceptuel parce que les objets proches obstruent la vue des objets derrière eux.
Ces techniques peuvent être mises en œuvre au niveau du sprite. Cependant, pour la projection la plus réaliste, chaque image-objet a un modèle 3D et est rendue au niveau des pixels.
la source
Cela ressemble à la façon dont vous pouvez capturer des images 2D de notre monde à la caméra. L'environnement 3D est décrit en termes de coordonnées X, Y et Z, mais en fin de compte, vous devez le mapper sur un écran 2D avec uniquement les axes X et Y. Cela se fait par projection , où chaque point 3D est projeté sur un plan de vue 2D.
Pour le dire simplement, vous pouvez imaginer des lignes de projection allant de la caméra virtuelle dans l'espace 3D à chaque point 3D en passant par le plan de vue. Le point où une ligne de projection coupe le plan 2D est la projection du point 3D. En projection orthographique, ces lignes de projection sont toutes parallèles; la distance entre l'objet et la caméra ne fait aucune différence pour la forme projetée. Ce type de projection n'est pas réaliste mais est utile dans certains cas comme pour dessiner des graphiques 2D à l'aide d'un moteur 3D (le HUD par exemple). L'autre type de projection est la projection en perspective où ces lignes convergent, faisant apparaître des objets plus éloignés plus petits et donnant des résultats plus réalistes. Cette page contient quelques chiffres qui pourraient vous aider à visualiser le processus.
La projection est l'un des nombreux objets de transformation subis dans le pipeline graphique et se fait généralement à l'aide d'une matrice de projection . Notez que bien que la projection implique de supprimer la coordonnée Z, en réalité une valeur Z transformée est toujours utilisée pour mesurer la profondeur de l'écran afin que nous puissions dire quels objets sont visibles et lesquels sont occlus par d'autres objets. C'est ce qu'on appelle la mise en mémoire tampon z .
la source
Il s'agit de projection , une opération géométrique qui vous permet de définir un espace à partir d'un autre espace de dimension supérieure (en gros, dans votre cas, vous décrivez une image 2D à partir d'un environnement 3D).
Autrement dit, voici comment les moteurs de rendu 3D génèrent une image (compte tenu d'une scène 3D et d'une projection):
Pour chaque pixel de l'image résultante
Bien sûr c'est un modèle simple, je ne parle pas des objets réfléchissants / réfringents / translucides d'effets spéciaux comme la fumée ...
la source
La matrice . Ou plutôt, beaucoup de mathématiques matricielles.
C'est effrayant pour les non-initiés. Il y a généralement trois matrices 4x4 impliquées dans la transformation d'un tas de coordonnées 3D dans l'espace en coordonnées 2D sur l'écran (y compris la profondeur dans l'écran en Z).
Les matrices 3D sont un ensemble de 16 valeurs à virgule flottante disposées dans une grille 4x4. Des algorithmes sont utilisés pour générer les valeurs requises, puis en utilisant la multiplication matrice-vecteur, ces nombres transforment un vecteur tridimensionnel (X, Y, Z).
Ceci est la matrice d' identité . Il ne fait essentiellement rien aux coordonnées d'un vecteur.
Modèle
Le premier est la matrice mondiale ou modèle . Cette matrice prend les sommets dans un modèle individuel (comme une caisse) modélisé autour de l'origine (0, 0, 0) et les transforme en coordonnées de sommets mondiaux. Cela peut inclure la mise à l'échelle de l'objet, sa rotation autour de son origine et enfin sa traduction à l'endroit où il se trouve dans la scène.
Vue
La deuxième matrice est la matrice de vue . Cela prend les coordonnées du monde et les transforme pour qu'elles soient dans le contexte de la vue. Le concept de caméra est généralement utilisé pour générer cette matrice.
La caméra contient généralement un vecteur de position , un vecteur de direction ou de cible et un vecteur haut . Ce vecteur haut décrit le «spin» de la caméra.
Ces vecteurs sont utilisés pour générer ce qu'on appelle une matrice de regard .
L'effet que cela a est similaire à la matrice du monde dans le fait qu'elle tourne et déplace essentiellement le monde autour de la caméra pour «positionner» la caméra.
Une caméra de 10 unités le long de l'axe X traduira les coordonnées du monde de 10 unités dans l'autre sens.
Projection
La dernière pièce du puzzle est la matrice de projection . Dans une projection en perspective de type caméra, la matrice transforme presque les coordonnées de l'écran pour donner l'illusion d'une perspective avec un champ de vision de x degrés.
Si vous pensez en termes de coins de l'écran (pour un jeu 640x480), c'est ainsi que la projection "aligne" les coordonnées le long de l'axe Z dans les coordonnées 2D de l'écran. Pour la projection orthographique, aucune mise à l'échelle n'a lieu le long de l'axe Z dans l'écran. Pour la perspective, plus l'objet est éloigné, plus il devient petit par rapport à l'étendue de l'écran.
la source