2010-01-20 8 views
13

J'ai un objet défini en coordonnées du monde, disons un cercle centré en (2,3) avec le rayon 4. Si je veux que le cercle ne soit pas déformé, être entièrement visible dans la fenêtre et être aussi grande que possible dans la fenêtre, comment puis-je formuler une commande gluOrtho2D pour créer une fenêtre du monde sur la base des spécifications mentionnées ci-dessus étant donné que:gluOrtho2D et glViewport

glViewport(20, 30, 1000, 500)? 

Je commence à me confondre avec toute fenêtre vs monde vs écran, etc coordonnées. Quelqu'un peut-il me promener à travers cela? Je veux vraiment comprendre.

Répondre

27

Dans votre exemple, la fenêtre est de 1000 pixels de large sur 500 pixels de haut. Vous devez donc spécifier les coordonnées glOrtho qui ont le même rapport d'aspect (2: 1).

Votre cercle a 4 unités de rayon, vous avez donc besoin d'une vue de 8 unités de hauteur sur 8 unités de large au moins. Considérant le rapport d'aspect de 2: 1, faisons que 16 unités de large par 8 unités de haut.

Le centre est à (2, 3). centrage Donc ces 16 x 8 autour que vous devriez obtenir:

glOrtho2D (2 - 8, 2 + 8, 3 - 4, 3 + 4); 

C'est:

glOrtho2D (-6, 10, -1, 7); 

Mappe efficacement la coordonnée X de -6 au bord gauche de la fenêtre. Le mappage glViewport mappe ensuite l'emplacement réel sur l'écran. Lorsque la taille de l'écran change, vous devez ajuster les coordonnées glOrtho2D pour compenser le rapport d'aspect, mais tant que la fenêtre est de 2: 1, ces appels glOrtho2D n'auront pas besoin d'être modifiés.

+0

Merci! Mais comment les 20,30 de la commande viewport entrent en jeu? Est-ce que cela affecte ce que sera le glOrtho2D? Si non, pourquoi pas? – Alex

+4

@Alex: Cela n'affecte pas vraiment ce que sera le glOrtho2D. Nous disons: mappez la coordonnée X de -6 dans mes coordonnées du modèle sur le bord gauche de la fenêtre (qui a déjà été mappé au pixel 20 dans la fenêtre). – Tarydon

+1

Juste une note: ce n'est pas glOrtho2D, c'est ** 'gluOrtho2D()' ** (voir ** glu **): http://www.opengl.org/sdk/docs/man2/xhtml/gluOrtho2D. xml, ou ** 'glOrtho()' **: http://www.opengl.org/sdk/docs/man2/xhtml/glOrtho.xml – Sk8erPeter