Question

J'essaie de faire une simple rotation dans OpenGL mais je dois manquer l'essentiel.Je ne recherche pas tant un correctif spécifique qu'une explication rapide ou un lien expliquant la rotation OpenGL de manière plus générale.

Pour le moment j'ai un code comme celui-ci :

glPushMatrix();
  glRotatef(90.0, 0.0, 1.0, 0.0);
  glBegin(GL_TRIANGLES);        
    glVertex3f( 1.0, 1.0, 0.0 );        
    glVertex3f( 3.0, 2.0, 0.0 );        
    glVertex3f( 3.0, 1.0, 0.0 );        
  glEnd();
glPopMatrix();

Mais le résultat n’est pas un triangle pivoté de 90 degrés.

ModifierHmm, merci à Mike Haboustak - il semblait que mon code appelait une fonction SetCamera qui utilisait glOrtho.Je suis trop nouveau sur OpenGL pour avoir une idée de ce que cela signifie, mais la désactivation de cette fonctionnalité et la rotation sur l'axe Z ont produit le résultat souhaité.

Était-ce utile?

La solution

Obtenez-vous une ligne droite de 1 unité ?Il semble que la pourriture à 90 degrés.autour de Y vous fera regarder le côté d'un triangle sans profondeur.

Vous devriez plutôt essayer de tourner autour de l’axe Z et voir si vous obtenez quelque chose qui a plus de sens.

OpenGL possède deux matrices liées à l'affichage de la géométrie, la ModelView et la Projection.Les deux sont appliqués aux coordonnées avant que les données ne deviennent visibles à l'écran.La matrice ModelView est d’abord appliquée, transformant les données de l’espace modèle en espace de visualisation.Ensuite, la matrice de projection est appliquée et transforme les données de l'espace de visualisation pour une « projection » sur votre moniteur 2D.

ModelView est utilisé pour positionner plusieurs objets à leur emplacement dans le "monde", Projection est utilisé pour positionner les objets sur l'écran.

Votre code semble correct, donc je suppose qu'en lisant la documentation, vous savez quelle est la nature des fonctions comme glPushMatrix().Si la rotation autour de Z n'a toujours pas de sens, vérifiez que vous modifiez la matrice ModelView en appelant glMatrixMode.

Autres conseils

Assurez-vous de modifier la matrice modelview en plaçant ce qui suit avant l'appel à glRotatef :

glMatrixMode(GL_MODELVIEW);

Sinon, vous risquez de modifier soit la projection, soit une matrice de texture.

La "réponse acceptée" n'est pas entièrement correcte - tourner autour du Z ne vous aidera pas à voir ce triangle à moins que vous n'ayez fait des choses étranges avant ce code.La suppression d'un appel glOrtho(...) a peut-être corrigé le problème dans ce cas, mais vous avez encore quelques autres problèmes.

Deux problèmes majeurs avec le code tel qu'écrit :

  • Avez-vous déjà positionné la caméra ?Dans OpenGL, la caméra est située à l'origine, regardant vers le bas l'axe Z, avec Y positif vers le haut.Dans ce cas, le triangle est dessiné dans le même plan que votre œil, mais vers le haut et vers la droite.À moins que vous n'ayez une matrice de projection très étrange, vous ne la verrez pas.gluLookat() est la commande la plus simple pour ce faire, mais toute commande qui déplace la matrice actuelle (qui devrait être MODELVIEW) peut fonctionner.

  • Vous dessinez le triangle dans une méthode à gauche ou dans le sens des aiguilles d'une montre, alors que la valeur par défaut pour OpenGL est un système de coordonnées à droite ou dans le sens inverse des aiguilles d'une montre.Cela signifie que, si vous éliminez les faces arrière (ce que vous ne faites probablement pas, mais que vous passerez probablement à mesure que vous progresserez), vous ne verrez pas le triangle comme prévu.Pour voir le problème, placez votre main droite devant votre visage et, en imaginant qu'elle se trouve dans le plan X-Y, déplacez vos doigts dans l'ordre dans lequel vous dessinez les sommets (1,1) à (3,2) à (3,1). ).Lorsque vous faites cela, votre pouce est tourné vers l’opposé de votre visage, ce qui signifie que vous regardez l’arrière du triangle.Vous devez prendre l’habitude de dessiner des visages avec une méthode pour droitier, car c’est la manière courante de le faire dans OpenGL.

La meilleure chose que je puisse recommander est d'utiliser les tutoriels NeHe - http://nehe.gamedev.net/.Ils commencent par vous montrer comment configurer OpenGL sur plusieurs systèmes, passent au dessin de triangles et continuent lentement et sûrement vers des sujets plus avancés.Ils sont très faciles à suivre.

Quand j'ai jeté un premier coup d'œil à OpenGL, le Tutoriels NeHe (voir le menu de gauche) ont été d'une valeur inestimable.

J'aimerais recommander un livre :

Infographie 3D :Une introduction mathématique avec OpenGL par Samuel R.Bus

Il fournit des explications très claires et les mathématiques sont largement applicables aux domaines non graphiques.Vous trouverez également une description détaillée des projections orthographiques par rapport aux projections orthographiques.transformations de perspectives.

Concernant la matrice de projection, vous pouvez trouver une bonne source pour commencer ici :

http://msdn.microsoft.com/en-us/library/bb147302(VS.85).aspx

Il explique un peu comment construire un type de matrice de projection.La projection orthographique est la forme très basique/primitive d'une telle matrice et, fondamentalement, elle prend 2 des 3 coordonnées des axes et les projette sur l'écran (vous pouvez toujours inverser les axes et les mettre à l'échelle mais il n'y a pas d'effet de déformation ou de perspective) .

La transformation des matrices est probablement l'une des choses les plus importantes lors du rendu en 3D et implique essentiellement 3 étapes matricielles :

  • Transform1 = Système de coordonnées de l'objet vers le monde (par exemple - rotation et échelle de l'objet)
  • Transform2 = Système de coordonnées mondiales vers Caméra (placer l'objet au bon endroit)
  • Transform3 = système de coordonnées de la caméra vers l'espace de l'écran (projection sur l'écran)

Habituellement, le résultat de la multiplication à 3 matrices est appelé matrice WorldViewProjection (si jamais vous tombez sur ce terme), car il transforme les coordonnées de l'espace modèle à travers le monde, puis en caméra et enfin en représentation à l'écran.

Amusez-vous

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