2009-01-31 8 views
2

Donc, je lis le livre "3D Math Primer pour le développement de graphismes et de jeux", venant d'un fond non mathématique, je commence enfin à saisir les mathématiques vectorielles/matricielles - qui est un soulagement.Transformer un objet entre deux espaces de coordonnées

Mais, oui, il y a toujours un mais j'ai du mal à comprendre la traduction d'un objet d'un espace de coordonnées à un autre. Dans le livre l'auteur prend un exemple avec gun shooting at a car (image) qui est tourné 20 degrés (juste un espace 2D pour la simplicité) dans "l'espace du monde". Nous avons donc trois espaces: Espace Monde, Espace Objet Gun et Espace Objet Voiture - correct? Le livre dit alors ceci:.

« Dans cette figure, nous avons introduit un fusil qui tire une balle dans la voiture Comme indiqué par le espace de coordonnées à gauche, nous normalement commencer par savoir à propos Maintenant, imaginez transformer l'espace de coordonnées en ligne avec l'espace objet de la voiture tout en gardant la voiture, le pistolet et la trajectoire de la balle encore.On sait connaître la position de l'arme et la trajectoire de la balle dans l'espace objet de la voiture, et nous pourrait effectuer des tests d'intersection pour voir si et où la balle frapperait la voiture. "

Et je suis cette explication, et quand je sais d'avance que la voiture tourne 20 degrés * dans l'espace mondial ce n'est pas un problème - mais comment cela se traduit dans une situation dire quand j'ai un archer dans un jeu de tir d'une colline vers le bas sur quelqu'un d'autre? Je ne connais pas l'angle dans lequel tout est déplacé là-bas?

Et quel espace objet est pivoté ici? Le monde ou l'espace Gun? Oui, comme vous pouvez le voir, je suis un peu confus.

Je pense que la réponse idéale serait en utilisant l'exemple de la voiture et le pistolet en utilisant des variables arbitraires pour des positions, angle, etc.

Répondre

3

Vous devriez lire comment change basis et penser à vecteur, pas des tableaux, mais les mathématiques: P

0

Comprenez-vous comment la notion de la façon dont la coordination des espaces et transforme le travail en 2D? Je trouve que les espaces de coordonnées et les transformations sont beaucoup plus faciles à visualiser en 2D avant d'essayer de passer à la 3D. De cette façon, vous pouvez travailler sur des scénarios de simulation et vous aider à comprendre les concepts majeurs.

Dans l'image que vous avez affichée, je pense que l'interprétation est que la voiture elle-même n'a pas changé dans son système de coordonnées interne, mais que son système a été tourné par rapport au système mondial.

Vous devez comprendre que la voiture a son propre système de coordonnées local. La géométrie de la voiture est définie en fonction de son système de coordonnées local. Ainsi, la longueur de la voiture s'étend toujours le long de l'axe des x dans son propre système local indépendamment de son orientation dans le monde. La voiture peut être orientée en transformant son système de coordonnées local.

Les systèmes de coordonnées sont toujours définis par rapport à un autre système, à l'exception de la racine, en l'occurrence le Monde. Donc, le pistolet a son propre système, la voiture a son propre système et ils sont tous deux intégrés dans le système mondial. Si je fais tourner ou déplace le système de la voiture par rapport au Monde, alors la voiture semblera tourner même si la géométrie est inchangée.

C'est quelque chose qui est très difficile à expliquer sans être capable de dessiner des scénarios visuels et mon google-fu ne parvient pas à trouver de bonnes descriptions des bases.

2

J'ai été programmeur de jeux et je l'ai fait à maintes reprises. Finalement, je me suis éloigné de l'utilisation des angles.Pour chaque objet, j'avais un vecteur orienté vers l'avant et un vecteur haut. Vous pouvez obtenir le vecteur de droite, puis, à partir d'un produit croisé. Et toutes les conversions entre les espaces deviennent des produits scalaires.

0

Comme le suggère une réponse précédente, conserver un vecteur ascendant, direct et droit est un bon moyen de définir un espace de coordonnées (euclidien). C'est encore mieux si vous ajoutez une origine, car vous pouvez représenter un plus large éventail d'espaces. Disons que nous avons deux espaces A et B, dans A, haut, avant et droite sont respectivement (0,1,0), (0,0,1) et (1,0,0), et le l'origine est à zéro cela donne les coordonnées xyz gauches habituelles pour A. Dites pour B nous avons u = (ux, uy, uz), f = (fx, fy, fz) et r = (rx, ry, rz) avec origine o = (ox, oy, oz). Alors pour un point à p = (x, y, z) dans B nous avons dans A (x * rx + y * ux + z * fx + ox, x * ry + y * uy + z * fy + oy, x * rz + y * uz + z * fz + oz).

Ceci peut être obtenu par inspection. Observez que, puisque les vecteurs droite, haut et vers l'avant pour B ont des composantes dans chaque axe de A, une composante de certaines coordonnées dans B doit contribuer aux trois composantes des coordonnées de A. ie puisque (0,1,0) dans B est égal à (ux, uy, uz), alors (x, y, z) = y * u + (autre chose). Si nous faisons cela pour chaque coordonnée, nous avons (x, y, z) = x * r + y * u + z * f + (autre chose). Si nous faisons l'observation que ces termes disparaissent à l'origine à l'exception de (d'autres choses) alors nous réalisons que (d'autres choses) doit en fait être o, ce qui donne les coordonnées dans A comme x * r + y * u + z * f + o, qui est (x * rx + y * ux + z * fx + ox, x * ry + y * uy + z * fy + oy, x * rz + y * uz + z * fz + oz) une fois que les opérations vectorielles sont développées.

Cette opération peut également être inversée, il suffit de définir les coordonnées dans A et de résoudre les équations pour les trouver dans B. par ex. (1,1,1) dans A est égal à x * r + y * u + z * f + o dans B. Cela donne trois équations dans trois inconnues et peut être résolu par la méthode des équations simultanées. Je ne vais pas me donner la peine d'expliquer cela ici ... mais voici un lien si vous êtes bloqué: link

Comment tout ceci se rapporte-t-il à votre exemple original de balle et de voiture? Eh bien, si vous faites pivoter une série de vecteurs vers le haut/vers l'avant/vers l'avant avec la voiture et que vous mettez à jour l'origine lorsque la voiture est traduite, vous pouvez passer de l'espace mondial à l'espace local de la voiture. Par exemple, au lieu de transformer des sommets pour un modèle de collision, vous pouvez transformer la puce en espace «voiture locale» et utiliser les coordonnées locales. Ceci est pratique si vous voulez transformer les sommets de la voiture pour un rendu sur un GPU, mais ne voulez pas subir la surcharge de lecture de ces informations pour les calculs de physique sur le CPU. Dans d'autres utilisations, il peut vous éviter de transformer des points x en transformant trois points et en effectuant ces opérations à la place, cela vous permet de combiner x transformations sur un grand nombre de points sans un impact significatif sur une seule transformation sur le même nombre des points.

0

Dans une situation de jeu en général, vous ne savez pas que la voiture a été tournée de 20 degrés, en soi; à la place, vos informations de positionnement pour la voiture contiendraient implicitement cette connaissance. Donc, dans cet exemple bidimensionnel, vous connaissez les coordonnées x, y du centre de la voiture et le vecteur x, y que la voiture pointe (les deux éléments d'information dans l'espace du monde) - sinon vous ne pourriez pas pour le dessiner. Ces deux informations sont tout ce dont vous avez besoin pour trouver la matrice à transformer entre l'espace du monde et l'espace objet de la voiture. (Et puis une personne pourrait regarder cette matrice dans cet exemple et dire, oh, regardez, rotation de 20 degrés - mais ce n'est pas une information que vous vous inquiétez normalement dans le jeu.)

Le problème du pistolet et de la voiture peut être résolu dans l'un des trois espaces. Donc, la question est, laquelle est la plus facile? On suppose que l'espace du pistolet est réglé de sorte que la balle soit tirée sur l'axe X. Il est donc facile de traduire cela dans l'un ou l'autre des autres espaces. Une voiture 2D va probablement être représentée dans son propre espace objet - peut-être sous la forme d'un ensemble de segments de lignes 2D ou de pixels 2D ou quelque chose.Vous pouvez certainement les traduire dans l'espace du monde ou dans l'espace objet du pistolet, mais si vous résolvez le problème dans l'espace objet de la voiture, vous n'avez pas à les traduire du tout, donc c'est le plus facile à utiliser pour ce problème.

C'est en quelque sorte comme la relativité: de son point de vue, aucun des espaces n'est tourné. Contrairement à la relativité, cependant, nous traitons l'espace du monde comme un cadre de référence fixe privilégié. Ainsi, les espaces modèles des objets sont tournés, mis en miroir, mis à l'échelle, traduits, etc. par rapport à l'espace du monde.

Questions connexes