Question

Je suis très novice dans la création de jeux (et dans OpenGL en général). J'essaie de faire un jeu en 2D, mais je suis tombé sur un point d'achoppement lorsque j'ai essayé de détecter les collisions.

Disons par exemple que je traduis la matrice actuelle, la rotation et la traduction à nouveau, puis dessine un point. Comment savoir où se situe ce point par rapport à tout ce que j'ai pu dessiner?

Existe-t-il un moyen de calculer "absolu"? coordonnées de la matrice actuelle?

Veuillez expliquer le plus simplement possible! merci:)

Était-ce utile?

La solution

OpenGL n'est pas un moteur de jeu, mais une bibliothèque de rendu. La détection des collisions est en revanche une fonction de votre logique de jeu. Par conséquent, cela ne devrait rien avoir à voir avec OpenGL, qui est simplement le mécanisme de visualisation permettant d'afficher une représentation visuelle à l'écran. Il ne connaît rien des objets de votre jeu et ne contient aucune donnée persistante utile. Si vous essayez de stocker la position d'un objet dans une matrice et de le déplacer via des transformations, vous risquez en fin de compte de subir les effets d'erreurs en virgule flottante cumulatives conduisant à un comportement imprévisible.

Ce que vous devriez faire à la place est de maintenir manuellement toutes les positions (ainsi que les orientations, les vitesses, etc.) de votre objet. Tous les mouvements d'objets doivent être effectués par vous dans le code de l'application. Lorsque vient le temps de rendre les objets, vous lisez leurs valeurs actuelles et les transmettez à OpenGL. En règle générale, vous prenez les données de polygone pour chaque objet de type à rendre, vous les faites pivoter en fonction de l'orientation de l'instance d'objet, vous les traduisez par leur position, puis vous les rendez. Répétez une fois par image.

Si vous connaissez bien le Modèle-Vue-Contrôleur alors que vos objets de jeu sont le modèle, et OpenGL fournit une vue. En tant que tel, vous devez manipuler votre modèle selon vos besoins et faire en sorte que la vue soit lue si nécessaire.

Autres conseils

Il est préférable de garder une trace de la position absolue de chaque objet.

Frustrant, n'est-ce pas? Tous les débutants en programmation OpenGL et graphique ont des questions similaires aux vôtres. Garder une trace des différents cadres de référence peut être difficile.

La première chose que je recommanderais est d’obtenir une copie de la OpenB SuperBible d’Amazon ou d’un autre détaillant. Cela commence au début absolu et se construit progressivement à partir de là. La première affiche qui a recommandé le site NeHe donne également de bons conseils.

En ce qui concerne votre question elle-même, lorsque vous créez un programme OpenGL, vous pouvez définir le " modelview " matrix doit être l'identité (voir la SuperBible pour plus d'informations) et toutes les coordonnées que vous définissez dans les appels glPoint () seront définies par rapport à cette matrice en tant que cadre de référence. Si vous ne faites rien d'autre que d'appeler glPoint () à partir de maintenant, tous vos objets seront dans le même système de coordonnées absolu.

Cela devient délicat lorsque vous commencez à appeler glTranslate et glRotate et glLoadMatrix, car ces fonctions transforment le cadre de référence. Lorsque cela se produit, tous les appels glPoint () suivants sont relatifs à ce nouveau cadre de référence.

(Comme mentionné par une autre affiche, si vous souhaitez revenir au cadre de référence précédent, vous devez enregistrer la matrice modelview sur une pile avant de la transformer, puis vous pouvez "extraire" la pile et revenir à où vous étiez avant.)

Il est difficile de décrire cela sur un site d'assistance, mais imaginez-le comme une série de bras mécaniques dans un fauteuil de dentiste. Il peut déplacer le plateau pour qu'il soit sous votre menton, puis le faire pivoter de manière à ce que votre menton soit en coupe Chaque mouvement indépendant peut être considéré comme une transformation, implémentée dans OpenGL comme une matrice.

Comme je l'ai dit, il est difficile de décrire cela correctement en ligne. Prenez le livre SuperBible et cela aura beaucoup plus de sens. Bonne chance!

Lorsque j'ai appris OpenGL, j'ai utilisé les 2 ressources suivantes pour tout.

Il semble que les didacticiels aient été payés. , en vendant un CD, mais ils étaient bien écrits, il vaudrait peut-être la peine de l’acheter.

Cependant, les NeHe sont toujours des didacticiels gratuits sur le Web, celle-ci pour la détection des collisions .

http://www.gamedev.net/reference/list.asp ? categoryid = 31

Qu'entendez-vous par "absolu"?

Si vous voulez que votre point soit relatif par rapport aux points précédents, vous pouvez inverser les transformations que vous venez de faire: traduisez par le négatif de la deuxième translation, faites pivoter dans le sens opposé le même nombre de la même quantité, puis traduisez par le négatif. de la première traduction. Cela vous donnera une transformation de vos nouvelles coordonnées en ancien système.

Vous pouvez également utiliser la transformation que vous avez déjà pour importer vos anciens points dans le nouveau système de coordonnées.

Surveillez les positions des objets en coordonnées mondiales et comparez-les directement.

Pour effectuer l'affichage, utilisez un modèle de caméra et appliquez-lui toutes vos transformations.

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