2010-12-23 6 views
2

Je crée un programme simple en OpenGL pour dessiner des rectangles avec la souris. Mon but est de cliquer quelque part, de faire glisser la souris et de créer un rectangle comme vous le faites dans la peinture ou tout autre programme de design.Conversion de coordonnées de fenêtre en coordonnées d'axe dans OpenGL

je une vue définie comme:

glMatrixMode(GL_PROJECTION); 
glOrtho(AXIS_X_MIN, AXIS_X_MAX, AXIS_Y_MIN, AXIS_Y_MAX, AXIS_Z_MIN, AXIS_Z_MAX); 

et une fenêtre définie ainsi:

glutInitWindowSize(WINDOW_WIDTH, WINDOW_HEIGHT); 

Comment puis-je convertir les coordonnées des fenêtres qui vont de 0 à WINDOW_WIDTH et de 0 à WINDOW_HEIGHT en coordonnées d'axe et quadrants respectifs?

Répondre

5

Essayez:

double x = x_mouse/(double) WINDOW_WIDTH 
      * (AXIS_X_MAX - AXIS_X_MIN) + AXIS_X_MIN; 
double y = (1 - y_mouse/(double) WINDOW_HEIGHT) 
      * (AXIS_Y_MAX - AXIS_Y_MIN) + AXIS_Y_MIN; 
0

gluUnProject - transforme la fenêtre de coordonnées cartographiques à l'objet coordonnées. Pour être honnête, je n'ai pratiquement aucune idée de comment cela fonctionne. Vous pouvez le vérifier ici: OpenGL - gluUnProject

Aussi, si vous essayez cela, il devrait fonctionner:

float coorX = mouseX * width/WINDOW_WIDTH + AXIS_X_MIN; 
float coorY = mouseY * heigth/ WINDOW_HEIGHT + AXIS_Y_MIN; 
+0

Votre version alternative fonctionne avec glOrtho() mais ne fonctionnera pas avec une perspective de transformation (alors que gluUnproject() fonctionnera dans les deux cas) – BrunoLevy

Questions connexes