Normes de coordonnées X, Y, Z?


12

Je suis assez nouveau dans le développement 3D de tous types, néanmoins les jeux. En lisant des tutoriels et des exemples, je trouve que les coordonnées X / Y / Z semblent un peu en arrière que ma première supposition.

J'avais imaginé que si une personne se promenait dans un champ, sa position X / Y changerait et si elle devait sauter ou monter ou descendre une colline, alors sa position Z changerait. Mes hypothèses semblent fausses parce que marcher autour d'un champ semble changer X / Z et sauter ou monter / descendre une colline modifie le Y.

1) Mes observations sont-elles correctes? La 3D est nouvelle pour moi et je ne pense peut-être pas aux choses correctement.

2) Quelle est la logique derrière le mouvement horizontal étant X / Z et le mouvement vertical étant Y?

3) Serais-je si mal d'utiliser X / Y comme mouvement horizontal et Z comme mouvement vertical dans XNA Framework?


Systèmes de coordonnées gauche / droite. DirectX est la main gauche, la valeur par défaut dans OpenGL est la main droite.
Jonathan Connell

Réponses:


19

Vos hypothèses ne sont pas fausses: chaque moteur traite ces coordonnées différemment. D'une manière générale, X est presque toujours l'axe Est-Ouest, mais que Y ou Z soit l'axe Altitude a tendance à varier. Si je comprends bien, Quake 3, le moteur source et le moteur Torque ont tous Z comme place. Il en va de l'outil de modélisation 3DS Max. Ce n'est pas rare.

Il est logique d'avoir un système de coordonnées qui est ordonné grossièrement par ordre décroissant d'importance, de sorte que l'aplatissement d'une représentation en moins de dimensions soit plus facile à comprendre. Par exemple, si votre jeu est défini sur une carte de hauteur 2D, il est logique que Z soit `` vers le haut '', car alors vos coordonnées X et Y dans la carte du monde 3D directement aux coordonnées X et Y sur la carte de hauteur. D'un autre côté, si vous pensez principalement en termes de rendu (et de nombreux développeurs de moteurs de jeu le font), vous êtes habitué à ce que X et Y soient les coordonnées de l'écran, donc l'ajout d'un 3e axe va naturellement à l'intérieur ou à l'extérieur de l'écran.

Utilisez ce qui est le plus simple pour vous, mais sachez que tout choix est arbitraire et que vous devrez peut-être convertir entre eux et utiliser plusieurs systèmes de coordonnées dans un même programme.


En fait, j'aime mieux les deux autres réponses, mais comme c'est la réponse acceptée, une note pour souligner que le Y étant vertical et Z étant à l'écran est la façon dont la plupart des API matérielles 3D sont configurées pour fonctionner (DirectX et OpenGL) . Si vous voulez votre propre système, sachez-le car une traduction peut être nécessaire. (Quelque chose utilisé de manière incorrecte mais cohérente peut souvent fonctionner comme vous le souhaitez, d'où le «peut-être» :))
James

1
Techniquement, OpenGL a Z sortant de l'écran par défaut, lorsque vous incluez la direction, donc bien que DirectX et DirectX aient Z parallèle à la direction de visualisation, ils sont toujours incompatibles! Lorsque vous travaillez avec la 3D, vous devez être capable de passer d'un système de coordonnées à un autre via les rotations, les traductions et la mise à l'échelle - en effet, c'est ainsi que les modèles se retrouvent dans le monde - il n'y a donc pas grand-chose à s'attacher trop à une notion de la norme.
Kylotan

Juste en soulignant alors quand il s'agit de millions de triangles, peut-être que moins vous avez à faire pour combattre le système coordiante du matériel peut-être mieux;) En fin de compte, faire des jeux est amusant malgré les niveaux de stress. Faites ce que vous voulez: )
James

La notion de "Z" comme entrant / sortant de l'écran ou étant l'altitude est quelque peu trompeuse. Il pourrait être plus simple de conceptualiser les transformations. Nous soumettons des coordonnées de sommet 3D / 4D qui sont finalement transformées en espace de fenêtre 2D mais avec une valeur de profondeur. L'idée qu'une API mappe intrinsèquement les coordonnées 3D de X, Y ou Z à la «profondeur» n'est pas vraiment correcte - vous pouvez proposer n'importe quelle transformation qui échange la signification des coordonnées. À la fin de cette transformation, vous obtiendrez toujours les coordonnées d'espace de fenêtre 2D et une valeur de profondeur.
PatrickB

1
Je ne sais pas vraiment où nous sommes en désaccord sur le reste: bien sûr, vous pouvez utiliser n'importe quel espace de coordonnées que vous vouliez tant que vous pouvez projeter sur x, y, profondeur à la fin, mais cette question concerne principalement la raison pour laquelle certaines conventions existent pour les systèmes de coordonnées, et les conventions sont inévitablement liées à des concepts du monde réel.
Kylotan

6

Imaginez-vous en regardant un morceau de papier tendu devant vous avec un graphique dessus, les axes sont généralement étiquetés X en bas et Y en haut de la verticale; cela laisse Z être l'axe extérieur le long du sol.

Ce n'est qu'une convention, mais il est beaucoup utilisé dans les graphiques où nous considérons Z comme la profondeur de la scène.

Dans d'autres domaines comme la CAO, votre version serait plus courante.


4

L'idée est que les axes x et y restent les mêmes - y est «en haut» à l'écran et x est en travers.

z - la troisième dimension, se projette à nouveau dans l'écran (en ignorant ici les problèmes de neutralité). En 3 dimensions, cela devient un peu étrange, mais pour positionner les choses dans l'espace d'écran, cela a plus de sens.

3) Vous pouvez si vous le souhaitez, mais ce serait douloureux et maladroit. Je vous conseillerais simplement de vous habituer aux projets Z dans / hors du moniteur.


1

1) Oui, vos observations sont correctes.

2) Le système de coordonnées XYZ global standard a du sens lorsque vous pensez en termes de tir à la première personne, lorsque vous regardez à travers les yeux d'un personnage de la scène avec une matrice de transformation vierge (identité). Comme lorsque vous dessinez un système de coordonnées sur une feuille de papier, X pointe vers la droite et Y vers le haut. Selon la règle de la main droite (x-> pouce, y-> index, z-> majeur), Z pointe vers vous.

3) Ce ne serait pas faux, mais ce serait un détournement des normes. Il y a trois problèmes auxquels je peux penser en ce moment: (a) Disons qu'un jour vous voulez utiliser une bibliothèque de physique qui utilise le cadre de coordonnées standard. Si vous n'avez pas suivi la norme, vous devez maintenant penser à la transformation qui vous emmène de votre monde vers le monde de la physique. Peut devenir ennuyeux lorsque vous souhaitez corriger un bug. (b) Lorsque vous voulez partager du code avec quelqu'un, ou amener quelqu'un pour aider au développement, il doit s'habituer à votre convention. (c) Lorsque vous utilisez des modèles 3D standard, vous devez toujours avoir une transformation au-dessus d'eux pour les empêcher de regarder de côté.

Maintenant, pour ajouter à la question 2, il est tellement utile de penser à X, Y et Z comme non seulement trois lettres, mais comme à droite, vers le haut et vers l'arrière. Chaque personnage de la scène a un système de coordonnées local qui lui est attaché, et dans leurs cadres de coordonnées locaux, X a toujours raison, Y est en haut et Z en arrière. Une fois que vous avez cela, vous pouvez maintenant donner un sens aux vecteurs que vous imprimez ou écrire vos algorithmes d'une manière logique. Disons que vous avez deux caractères A et B et que vous voulez faire quelque chose si l'un d'eux est face à l'autre. Vous pouvez simplement trouver l'emplacement de B dans le cadre de coordonnées de A (Ta ^ -1 * p_b), regardez le vecteur que vous obtenez et voyez si Z (en arrière) est négatif et X (à droite) et Y (en haut) sont petits, parce que ce vecteur vous indique combien en arrière, à droite et en haut B est par rapport à A.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.