Je suis nouveau dans la programmation et la programmation de jeux. J'ai lu quelque chose sur les vecteurs et les mathématiques, mais j'ai une question - où utiliser les vecteurs dans la programmation de jeux? Peut-être que n'importe qui peut donner un exemple simple où vous utilisez des vecteurs (en 2D)?
J'ai trouvé des exemples mais la plupart du temps ils sont dans la console où ils produisent des nombres, et de grands exemples que je ne comprends pas.
class Star
iciPoint2D
utilisé dansclass ResizeRectangle
Réponses:
Quels sont les vecteurs?
Les vecteurs sont des ensembles de coordonnées de dimensions variables. Chaque coordonnée dans un vecteur représente une position absolue dans cette direction de l'espace dans lequel se trouve le vecteur.
Notez que dans tous les cas, nous avons attribué une signification aux vecteurs pour notre problème. Bien que vous trouverez généralement des vecteurs utilisés pour la géométrie dans les jeux, il n'y a aucune raison que vous ne puissiez pas faire autre chose avec eux.
Pourquoi dois-je utiliser des vecteurs?
Tout d' abord, vous ne devez utiliser des vecteurs. Tant que vous gardez une trace de x et y, ou de toutes les coordonnées qui vous intéressent, d'une certaine manière, tout va bien.
Cependant, l'avantage d'utiliser des vecteurs est qu'ils représentent parfaitement des choses telles que la direction et la position, et ont également défini plusieurs opérations mathématiques qui vous facilitent la vie.
Pour un exemple simple de ceux-ci, considérons le produit scalaire .
Supposons que vous ayez un système radar dans un jeu de style descendant. Chaque ennemi qui apparaît dans le secteur du radar (un coin en forme de tarte en 2D) devrait avoir un petit point rouge sur votre écran. Donc, vous devez déterminer quels ennemis se trouvent dans votre section radar.
Vous pouvez tester si les ennemis sont à l'intérieur d'un triangle. Vous pouvez également tester si les ennemis sont contenus dans l'intersection des deux demi-espaces des plans / lignes définissant les deux côtés du secteur radar.
Ou, vous pouvez simplement utiliser un produit scalaire pour effectuer la vérification. Voici comment:
Ceci est très pratique et vous permet également d'avoir des radars qui pointent dans différentes directions (changez simplement le vecteur avant) et ont des largeurs différentes (changez simplement l'angle de largeur du radar) - et vous pouvez également réutiliser le même code pour ces cas !
Sinon, pourquoi utiliser des vecteurs?
Si vous êtes en 2D, le meilleur moyen d'obtenir des effets et des mouvements complexes (rotation, mise à l'échelle, etc.) est peut-être d'utiliser un graphique de scène. Une planète a un navire en orbite, le navire a un drone en orbite. Le calcul pour cela sans utiliser les mathématiques vectorielles est vraiment, vraiment moche.
Avec les mathématiques vectorielles, nous représentons chacun comme ayant un point et une matrice de transformation 3x3. La planète utilise sa transformation, le navire utilise sa transformation et la transformation de la planète, et le drone utilise sa transformation et la transformation du navire et la transformation de la planète.
Lorsque la planète bouge, vous changez sa transformation et le vaisseau et le drone se positionnent automatiquement "gratuitement". Code beaucoup plus propre.
Toujours pas convaincu. Les vecteurs sont également la représentation native de la position, de la géométrie et du mouvement utilisée par presque toutes les bibliothèques graphiques - et certainement OpenGL et DirectX. Vous ne risquez pas de vous échapper sans avoir à les utiliser.
Conclusion Les vecteurs sont un outil puissant pour écrire du code clair qui résout les problèmes géométriques de manière propre et élégante.
la source
Un exemple 2D est des coordonnées d'écran, il identifie un pixel sur l'écran et a une composante x et une composante y [x, y], c'est-à-dire la position supérieure gauche de l'écran [0, 0]
Un autre exemple: imaginez un texte défilant de la bordure d'écran droite à la bordure d'écran gauche. Vous devez maintenant définir la vitesse du texte défilant en pixels par seconde, c'est-à-dire [-20, 0] ce qui signifie que le texte défile de 20 pixels vers la gauche par seconde et ne change jamais la hauteur.
Un autre exemple plus avancé: imaginez un jeu 2D qui est censé fonctionner sur différentes résolutions d'écran 800x600, 1024x768 etc. Cela peut facilement être fait en utilisant en interne une largeur d'écran de 0,0 à 1,0 et une hauteur de 0,0 à 1,0 pour découpler la logique du jeu à partir de la résolution d'écran réelle. Maintenant, lorsque vous dessinez à l'écran, vous multipliez simplement le vecteur interne par le vecteur de résolution:
notez que les 3 variables sont ici des vecteurs 2D, elles ont une composante x et une composante y, c'est-à-dire pour cette internal_pos [0,5, 0,25]:
Ainsi, la position interne [0,5, 0,25] est transformée en position d'écran réelle [400, 150]
C'était l'essentiel. Le véritable avantage des vecteurs est l'application en algèbre linéaire où vous pouvez utiliser des matrices pour transformer vos sommets (rotation, échelle, miroir, etc.), c'est-à-dire pour faire pivoter facilement toute votre position interne de 90 degrés, ou vous devez permuter l'écran-y position 0 de haut en bas de l'écran, car c'est-à-dire qu'une bibliothèque tierce que vous utilisez utilise cette convention.
la source
screen_pos = internal_pos * screen_resolution
n'est pas invariante aux coordonnées comme vous l'avez écrite, elle pourrait être écrite de manière plus appropriéescreen_pos = map_to_screen * internal_pos
, où semap_to_screen
trouve un mappage linéaire (qui peut être écrit comme une matrice, dans ce cas une diagonale).Voici une excellente explication des vecteurs dans le développement de jeux sur le blog de Wolfire Games:
http://blog.wolfire.com/2009/07/linear-algebra-for-game-developers-part-1/
la source
Un vecteur est une entité qui a à la fois une valeur et une direction. Des exemples de vecteurs dans le monde réel et des jeux basés sur la physique incluent la vitesse et l'élan. Les propriétés qui n'ont que des valeurs mais aucune direction sont appelées scalaires et incluent l'emplacement, la masse, la densité, etc.
Les vecteurs sont nécessaires pour les jeux qui émulent des propriétés physiques de type vectoriel (comme mentionné - vitesse, accélération, etc.). Les mathématiques utilisées pour les calculs vectoriels sont appelées algèbre linéaire .
la source
Partout où vous avez un nombre pour chaque dimension pour représenter quelque chose, la collecte de ces nombres peut être considérée comme un vecteur. La position, la vitesse et l'accélération sont les principaux exemples de vecteurs. Dans certains cas, il peut également être pratique de représenter la direction de l'orientation comme vecteur.
Pour les choses de base, peu importe que vous considériez ou non ces nombres comme des vecteurs, mais si vous voulez faire n'importe quel type de physique, vous devez vous pencher sur les mathématiques vectorielles.
la source
Très simplement, tout ce qui a une position ou une direction, qui est partout dans un jeu, utilise des vecteurs. Un vecteur est comme un point
Cependant, la différence se résume vraiment à cela. Un point n'est qu'un point, tandis qu'un vecteur est une flèche.
si tu as
vous dites que je veux dire à cet endroit x 5 et y 10.
mais quand vous déclarez un vecteur ...
Votre vrai dire im déclarant une flèche de 0,0 à x 5, y 10;
vous pouvez même avoir le point à partir duquel votre vecteur pointe depuis un point dans l'espace de n'importe où, par exemple permet d'utiliser un point et un vecteur pour déplacer notre objet, nous utiliserons un Point2 pour stocker son emplacement et un vecteur2 pour le déplacer .
maintenant vous pouvez utiliser un vecteur pour déplacer ce point, disons que nous voulons déplacer ce point vers le haut de l'axe x 10 unités de sorte que vous avez
maintenant le point s'est déplacé là où votre flèche vectorielle le lui a indiqué.
le point est maintenant
Une dernière chose à noter est parfois qu'un vecteur est utilisé comme un point et vice versa simplement parce qu'ils contiennent le même type de données.
la source
v = pos - origin
doncv != pos
puisque l'origine est un point{0, 0, 0, 1}