10
votes

Inverser Y Axe Y et réglage du système de coordonnées dans OpenGL

Dans OpenGL, j'essaie d'inverser l'axe Y et de définir un type spécifique de système de coordonnées, tout comme comment Allegro l'a. En supposant que ma fenêtre soit 640x480, je veux que le haut à gauche de l'écran soit axe (0, 0) et le bas à droite (640, 480). Jusqu'à présent, j'ai réussi à obtenir le système de coordonnées approprié que je souhaite, mais je ne sais pas si cela fait la bonne manière. En ce qui concerne la retournement de l'axe Y, je n'ai pas pu l'inverser sans modifier le système de coordonnées que j'ai actuellement. Je ne veux pas quelque chose de hackish uniquement pour retourner une forme. Je veux que cela retourne toutes les formes futures que je fais sur l'axe Y tout en maintenant le système de coordonnées. Voici ce que j'ai jusqu'à présent.

Initialiser: xxx

rendu: xxx

EDIT:

j'ai compris que l'ajout Glscalef (1, -1, 1); va basculer ma forme, mais je dois l'inclure à l'intérieur de Glfushmatrix () de mes formes, et je ne sais pas si c'est la bonne façon de le faire ou si sa solution piraquine.


0 commentaires

3 Réponses :


1
votes

Vous seriez mieux de peaufiner la projection (pensez-y comme la "caméra") dans ce cas.

Découvrez la réponse de Tzaman ici: Modification du système d'axe OpenGL


0 commentaires

-1
votes

Vous devriez lire: http://www.opengl.org/ Documentation / Spécifications / Version2.0 / GLSPEC20.PDF Il époque très explicitement toutes les transformations de coordonnées. Suivez comment vos données d'entrée GLVERTEX passe par la vue et la projection du modèle, puis faites attention à la manière dont il devient des coordonnées de fenêtre normalisées et des pixels à partir de là. C'est assez lu et vous devez suivre toutes les étapes sur papier pour vraiment le comprendre. Mais ça vaudra la peine.


1 commentaires

Il serait très utile que vous puissiez également indiquer les pages concernées des spécifications OpenGL, car il s'agit d'un très long document ..



2
votes

Pour modifier le système de coordonnées, une échelle et une traduction sont requises dans cet ordre. xxx

Notez que GLTRANSLATEF est livré avant GLSCALEF Comme les matrices de transformation sont multipliées sur le côté droit de la valeur matricielle actuelle. En outre, vous n'avez pas besoin de définir la matrice allégro-visualisée par image; Une fois pendant l'initialisation suffit pour la plupart des cas d'utilisation. Vous pouvez cependant appuyer sur GL_MODELVIEW et appliquer toutes les transformations de modèle nécessaires.


Voici une analyse conceptuelle de la façon dont cela fonctionne. L'objectif est de vous permettre, du programmeur graphique, de spécifier des points à l'aide de «allegro» ou de coordonnées souhaitées, c'est-à-dire des coordonnées où l'origine est un coin supérieur gauche de la saillie orthographique (dans ce cas, cela se rapporte directement à l'écran). Pour ce faire, vous configurez la matrice de vue GL_MODELVIEW pour transformer de ces coordonnées souhaitées en coordonnées de caméra orthographiques (également appelée espace espace ou espace).

Tout d'abord, vous réorientez ( Échelle) L'axe de Y des coordonnées souhaitées pour correspondre aux coordonnées de vue (figure centrale). Deuxièmement, vous traduisez l'origine des coordonnées souhaitées pour correspondre à l'origine des coordonnées de vue. Cette traduction est faite par rapport aux coordonnées de vue (c'est-à-dire que l'origine des coordonnées de la vue est la moitié de l'écran horizontalement à droite et à la moitié de l'écran verticalement vers le bas). Cette dernière étape équivaut à transformer les points dans la direction opposée du décalage.

symboliquement, la balance transforme le point p = (px, py) sur p ' = (Px, -py) . La traduction transforme le point p ' sur p' '= (px - w / 2, py + h / 2) w est le La largeur de l'écran (480px) et h est la hauteur (640px). (Désolé, le diagramme final change de manière incorrecte h et w pour p '' parce que je ne peux pas faire de diagrammes si très bien). < / p>

Notez que l'axe z indique hors de l'écran depuis que nous n'avions pas échoué par -1.

La manière dont je préfère conceptualiser les modifications des systèmes de coordonnées (plus précisément, changement de cadres lorsque nous incluons le concept d'origine), c'est que nous modifions les vecteurs de base (x, y, etc.) et l'origine avec des opérations ultérieures à l'échelle, à la rotation et de traduction (dans cet ordre ). Ceci est très similaire à la manière dont nous conceptualisons de déplacer la caméra en appliquant des traductions dans la direction opposée avec laquelle la caméra bouge.

 Schéma approximativement dessiné des deux transformations < / p>


0 commentaires