2010-01-20 4 views
13

Ich habe ein Objekt in Weltkoordinaten definiert, sagen wir einen Kreis zentriert bei (2,3) mit Radius 4. Wenn ich möchte, dass der Kreis nicht verzerrt wird, um im Ansichtsfenster vollständig sichtbar zu sein und so zu sein groß wie möglich innerhalb der Ansichtsfenster, wie kann ich einen gluOrtho2D Befehl formulieren eine Welt Fenster auf den oben genannten Spezifikationen gegeben Basis zu schaffen, dass:gluOrtho2D und glViewport

glViewport(20, 30, 1000, 500)? 

ich mit der ganzen Ansichtsfenster vs Welt vs Bildschirm, etc Koordinaten bin verwirrt zu werden. Kann mich jemand durchgehen? Ich möchte wirklich den Dreh raushaben.

Antwort

27

In Ihrem Beispiel ist das Ansichtsfenster 1000 Pixel breit und 500 Pixel hoch. Sie müssen also GlOrthokoordinaten angeben, die das gleiche Seitenverhältnis (2: 1) haben.

Ihr Kreis ist 4 Einheiten im Radius, Sie brauchen also eine Ansicht, die 8 Einheiten hoch und mindestens 8 Einheiten breit ist. In Anbetracht des Seitenverhältnisses von 2: 1, machen wir das 16 Einheiten breit und 8 Einheiten hoch.

Das Zentrum ist (2, 3). So Zentrierung diese 16 x 8 um, dass Sie bekommen sollten:

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

Das heißt:

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

Diese effektiv bildet die X von -6 bis zum linken Rand des Darstellungs koordinieren. Das glViewport-Mapping ordnet das dann der tatsächlichen Position auf dem Bildschirm zu. Wenn sich die Bildschirmgröße ändert, müssen Sie die glOrtho2D-Koordinaten anpassen, um das Seitenverhältnis zu kompensieren, aber solange das Ansichtsfenster 2: 1 ist, müssen diese glOrtho2D-Aufrufe nicht geändert werden.

+0

Danke! Aber wie kommen die 20,30 des Viewport-Befehls ins Spiel? Beeinflusst das den glOrtho2D? Wenn nicht, warum nicht? – Alex

+4

@Alex: Es beeinflusst nicht wirklich, was der glOrtho2D sein wird. Wir sagen: Ordnen Sie die X-Koordinate von -6 in meinen Modellkoordinaten der linken Kante des Ansichtsfensters zu (das bereits Pixel 20 im Fenster zugeordnet wurde). – Tarydon

+1

Nur ein Hinweis: das ist nicht GlOrtho2D, das ist ** 'gluOrtho2D()' ** (siehe ** Glu **): http://www.opengl.org/sdk/docs/man2/xhtml/gluOrtho2D. xml oder ** 'glOrtho()' **: http://www.opengl.org/sdk/docs/man2/xhtml/glOrtho.xml – Sk8erPeter

Verwandte Themen