Question

Je lis donc le " Apprêt mathématique 3D pour le graphisme et le développement de jeux " livre, qui vient d’un peu de fond non mathématique, je commence enfin à comprendre les mathématiques vectorielle / matricielle - ce qui est un soulagement.

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 un coup de feu tiré sur une voiture (image) transformé. 20 degrés (juste un espace 2D pour plus de simplicité) dans & "Espace mondial &"; Nous avons donc trois espaces: Espace mondial, Espace objet pistolet et Espace objet voiture - correct? Le livre dit ensuite ceci:

  

& "; Dans cette figure, nous avons présenté un fusil qui tire une balle dans la voiture. Comme indiqué par le   coordonner l’espace à gauche, nous commencerions normalement par connaître le fusil et la trajectoire   de la balle dans l'espace mondial. Maintenant, imaginez transformer l’espace de coordonnées en ligne avec le   car & # 8217; espace objet tout en maintenant la voiture, le pistolet et la trajectoire de la balle. Maintenant nous   connaître la position du pistolet 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 toucherait la voiture. "

Et je suis cette explication, et quand je sais au préalable que la voiture tourne de 20 * degrés dans l’espace mondial, ce n’est pas un problème - mais comment cela se traduit-il dans une situation, par exemple lorsque j’ai un archer dans un jeu en tir d'une colline sur quelqu'un d'autre? Je ne sais pas à quel angle tout est déplacé là-bas?

Et quel espace objet est tourné ici? Le monde ou l'espace des armes à feu? Ouais, comme tu peux le voir, je suis un peu confus.

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

Était-ce utile?

La solution

Vous devriez lire comment changer de base et penser au vecteur , pas des tableaux mais des maths: P

Autres conseils

J'étais un programmeur de jeu et je le faisais maintes fois. Finalement, je me suis abstenu d'utiliser des angles. Pour chaque objet, j'avais un vecteur orienté vers l'avant et un vecteur ascendant. Vous pouvez alors obtenir le vecteur opposé à droite à partir d'un produit croisé. Et toutes les conversions entre espaces deviennent des produits scalaires.

Comprenez-vous comment la notion de coordination des espaces et des transformations fonctionne 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 pourrez travailler & "What-if &"; scénarios sur papier et vous aide à saisir les concepts principaux.

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é pivoté par rapport au système du monde.

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, quelle que soit 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, dans ce cas 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 du monde. Si je fais pivoter ou déplace le système de la voiture par rapport au monde, la voiture semblera pivoter même si la géométrie n'a pas été modifiée.

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

Comme une réponse précédente l’indique, conserver un vecteur haut, en avant et à droite est un bon moyen de définir un espace de coordonnées (euclidien). C'est encore mieux si vous ajoutez également une origine, car vous pouvez représenter un plus grand nombre d'espaces.

Disons que nous avons deux espaces A et B, en A, en haut, en avant et à droite, respectivement (0,1,0), (0,0,1) et (1,0,0), et l'origine est à zéro, cela donne les coordonnées xyz habituelles pour gaucher 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. Notez que, puisque les vecteurs droit, haut et avant de B ont des composantes dans chaque axe de A, une composante de certaines coordonnées de B doit contribuer aux trois composantes des coordonnées de A, c’est-à-dire que (0,1,0) dans B est égal à (ux, uy, uz), alors (x, y, z) = y * u + (quelques autres éléments). Si nous faisons cela pour chaque coordonnée, nous avons que (x, y, z) = x * r + y * u + z * f + (quelques autres éléments). Si nous faisons observer que, à l'origine, ces termes disparaissent à l'exception de (certains autres éléments), alors nous réalisons que (certains autres éléments) 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 les opérations vectorielles étendues.

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 retrouver dans B. p. ex. (1,1,1) dans A est égal à x * r + y * u + z * f + o dans B. Cela donne trois équations à trois inconnues et peut être résolu par la méthode des équations simultanées. Je ne m'embêterai pas à expliquer cela ici ... mais voici un lien si vous restez bloqué: link

Comment tout cela est-il lié à votre exemple initial de balle et de voiture? Eh bien, si vous faites pivoter un ensemble de vecteurs haut / droit / avant avec la voiture et mettez à jour l'origine à mesure que la voiture est traduite, vous pouvez passer de l'espace mondial à l'espace local de la voiture et faciliter certains tests. Par exemple, au lieu de transformer des sommets pour un modèle de collision, vous pouvez transformer la puce en un espace «local de voiture» et utiliser les coordonnées locales. C’est pratique si vous voulez transformer les sommets de la voiture pour les rendre sur un GPU, mais ne voulez pas subir la surcharge de la lecture de ces informations pour les utiliser pour les calculs physiques sur le CPU.

Dans d’autres utilisations, il vous permet d’économiser la transformation de x points en transformant trois points et en effectuant ces opérations. Cela vous permet de combiner x transformations sur un grand nombre de points sans impact significatif sur les performances d’une transformation unique sur le même nombre de transformations. points.

En situation de jeu, en général, vous ne sauriez pas que la voiture a subi une rotation de 20 degrés; Au lieu de cela, vos informations de positionnement pour la voiture contiendraient implicitement ces connaissances. Donc, dans cet exemple à deux dimensions, vous connaissez les coordonnées x, y du centre de la voiture et le vecteur x, y que la voiture pointe (les deux informations figurant dans l'espace mondial). 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 mondial et l'espace objet de la voiture. (Ensuite, 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 qui vous préoccuperait normalement dans le jeu.)

Le problème du pistolet et de la voiture peut être résolu dans l’un des trois espaces. La question est donc de savoir laquelle est la plus facile. Vraisemblablement, l'espace de l'arme à feu est configuré pour que la balle soit tirée le long de l'axe X. Il est donc facile de traduire cela dans l'un des autres espaces. Une voiture 2D va probablement être représentée dans son propre espace objet - peut-être comme un ensemble de segments de ligne 2D ou de pixels 2D ou quelque chose d'autre. Vous pouvez certainement traduire ceux-ci dans l'espace mondial ou dans l'objet des armes à feu, mais si vous résolvez le problème dans l'espace des objets de voiture, vous n'avez pas à les traduire du tout, c'est donc le moyen le plus facile de résoudre ce problème.

C'est un peu comme la relativité: de son point de vue, aucun des espaces n'est pivoté. Contrairement à la relativité, nous traitons l’espace mondial comme un cadre de référence fixe privilégié. Ainsi, les espaces de modèle des objets sont pivotés, mis en miroir, redimensionnés, traduits, etc. par rapport à l'espace mondial.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top