2011-03-20 5 views
1
GL.LoadIdentity(); 
    GL.Translate(0f, 0f,-1f); 

    GL.Begin(BeginMode.Quads); 
    GL.Color4(1f, 0f, 0f, 1f); 

    GL.Vertex3(-1.0f, 1.0f,0);    
    GL.Vertex3(1.0f, 1.0f,0);    
    GL.Vertex3(1.0f, -1.0f,0);    
    GL.Vertex3(-1.0f, -1.0f,0);    
    GL.End(); 

Ceci utilise le système de coordonnées du monde, et maintenant je veux le faire en utilisant l'emplacement de l'écran en pixel. Comment faire ça? Un grand merci pour votre aideOpenGL: Comment convertir les coordonnées du monde en coordonnées de l'écran?

Répondre

2

OpenGL n'a pas de système de coordonnées "monde". Il a un espace de modélisation, qui est transformé par la matrice modelview et il a un espace de clip qui est atteint à partir de l'espace de visualisation du modèle en le transformant par la matrice de projection. L'espace de clip est [-1, 1]^3 et il est mappé dans la fenêtre d'affichage et dans la plage de profondeur du tampon Z. Donc, ce que vous devez faire est de définir une chaîne de transformations qui mappe les coordonnées du modèle en coordonnées de la fenêtre d'affichage par une transformation d'identité (eh bien ça ne marchera pas pour Z). La transformation de l'espace du clip vers la fenêtre d'affichage est fixe. Donc, vous voulez faire en utilisant la projection, en laissant la modelview Transform identité:

Cela fait l'affaire:

glViewport(x, y, width, height); 

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glOrtho(0, width, 0, height, -1, 1); 

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 

Mettez-le en face de chaque ensemble de commandes de dessin se produire dans l'espace de pixels de la fenêtre.

Questions connexes