2 votes

Algèbre linéaire dans les jeux dans un espace 2D

Je suis actuellement en train d'apprendre l'algèbre linéaire dans les jeux et je me sens presque prêt à utiliser mes nouvelles connaissances dans un espace 2D simple. Je prévois d'utiliser une bibliothèque mathématique, avec des vecteurs/matrices, etc. pour représenter les positions et directions, contrairement à mon dernier jeu, qui était assez simple pour ne pas en avoir besoin.

Je veux juste une clarification sur ce point. Tout d'abord, est-il valide d'exprimer une position dans un espace 2D avec des coordonnées homogènes 4x4, comme ceci :

[400, 300, 0, 1]

Ici, je suppose, pour simplifier, que nous travaillons dans une résolution fixe (et dans l'espace écran) de 800 x 600, donc ceci devrait être un point au milieu de l'écran.

Est-ce valide ?

Supposons que cette position représente la position du joueur, si j'utilisais un vecteur, je pourrais représenter la direction vers laquelle le joueur est tourné :

[400, 400, 0, 0]

Donc ce vecteur représenterait que le joueur est tourné vers le bas de l'écran (si nous travaillons dans l'espace écran.

Est-ce valide ?

Enfin, si je voulais tourner le joueur de 90 degrés, je sais que je devrais multiplier le vecteur par une matrice/quaternion, mais c'est là que je suis confus. Je sais que les quaternions sont plus efficaces, mais je ne suis pas exactement sûr de la manière dont je procéderais pour tourner la direction vers laquelle mon joueur est tourné.

Est-ce que quelqu'un pourrait expliquer les mathématiques derrière la construction d'un quaternion et sa multiplication par mon vecteur de direction ?

J'ai également entendu dire qu'OpenGL et D3D représentent les vecteurs d'une manière différente, comment cela fonctionne-t-il ? Je ne le comprends pas exactement.

J'essaie de commencer à maîtriser les bases de l'algèbre linéaire dans les jeux avant de passer dans un espace 3D dans plusieurs mois.

1voto

Nico Schertler Points 10585

Vous pouvez représenter votre position comme un coordonnée 4D, cependant, je recommanderais d'utiliser uniquement les dimensions qui sont nécessaires (c'est-à-dire un vecteur 2D).

La direction est principalement exprimée sous forme d'un vecteur qui part de la position du joueur et pointe dans la direction correspondante. Ainsi, un vecteur de direction de (0,1) serait beaucoup plus facile à manipuler. Étant donné ce vecteur, vous pouvez utiliser une matrice de rotation. Les quaternions ne sont pas vraiment nécessaires dans ce cas, car vous ne voulez pas faire de rotation autour d'axes arbitraires. Vous voulez simplement effectuer une rotation autour de l'axe z. Votre bibliothèque d'aide devrait fournir des méthodes pour créer une telle matrice et transformer le vecteur avec elle (transformer comme d'habitude).

Je ne suis pas sûr de la différence entre la représentation des vecteurs par OpenGL et celle de D3D. Mais je pense que tout se résume à l'utilisation de la mémoire, ce qui devrait être quelque chose que vous ne voulez pas avoir à vous soucier.

1voto

Je ne peux pas répondre à toutes vos questions, mais en termes de ce qui est 'valide' ou non, cela dépend complètement de savoir si cela contient toutes les informations dont vous avez besoin et si cela vous semble logique.

De plus, il est un peu étrange que la direction dans laquelle un objet est orienté soit un vecteur non unitaire. En gros, vous n'avez pas besoin de savoir la longueur du vecteur pour déterminer la direction dans laquelle ils sont orientés, vous devez simplement pouvoir déterminer les radians ou degrés qu'ils ont tournés par rapport à 0 degré ou radian. Par conséquent, les gens ont généralement simplement encodé les radians ou degrés directement car de nombreuses bibliothèques d'algèbre linéaire vous permettront d'effectuer des calculs vectoriels en les utilisant.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X