Wie kann ich eine Verformung verhindern, wenn über die Line-of-sight in OpenGL Drehen?

StackOverflow https://stackoverflow.com/questions/79360

  •  09-06-2019
  •  | 
  •  

Frage

Ich habe eine Ellipse in der XZ-Ebene gezogen, und stelle meine Perspektive leicht nach oben auf der Y-Achse und zurück auf der Z, mit Blick auf dem Zentrum der Ellipse von einem 45-Grad-Winkel, mit gluPerspective () einzustellen meine Sichtstumpfs.

Ellipse

Nicht rotierte, die Hauptachse der Ellipse erstreckt sich über die Breite meines Ansichtsfenster. Als ich um 90 Grad über meine line-of-sight drehen, erstreckt sich die Hauptachse der Ellipse nun die Höhe meines Ansichtsfenster, so dass die Ellipse verformt (in diesem Fall, so dass es weniger exzentrisch erscheinen).

gedrehten Ellipse

Was muß ich tun, um diese Verformung zu verhindern (oder zumindest Konto für sie), so eine Drehung um die Line-of-sight bewahrt die empfundene Hauptachse der Ellipse (in diesem Fall, so dass es über die gehen Ansichtsfenster)?

War es hilfreich?

Lösung

Es sieht aus wie Sie 1,0 als Aspekt verwenden, wenn Sie gluPerspective () aufrufen. Sie sollten Breite / Höhe verwenden. Zum Beispiel, wenn Ihr Ansichtsfenster 640x480 ist, würden Sie 1.33333 als Aspekt Argument verwenden.

Andere Tipps

Nach dem OpenGL Spec:

void gluPerspective( GLdouble fovy,
                     GLdouble aspect,
                     GLdouble zNear,
                   GLdouble zFar )

Aspect sollte eine Funktion des Fensters Breite und Höhe sein. Insbesondere Breite geteilt durch Höhe (aber achten Sie auf eine Division durch Null).

Vielleicht verwenden Sie 1 als Aspekt, der nicht korrekt ist, wenn Ihr Fenster ein Quadrat ist.

Es sieht aus wie der Aspekt Parameter auf Ihrer gluPerspective Anruf Notwendigkeit Zwicken. Siehe The Man Seite . Wenn Ihr Fenster physisch Platz war, wäre das Seitenverhältnis 1 und Ihr Problem weggehen würde. Allerdings ist Ihr Fenster ist rechteckig, so dass die Sichtstumpfs als nicht-Quadrat muss.

Stellen Sie das Seitenverhältnis / window_height window_width und Ellipse sollte korrekt aussehen. Beachten Sie, dass Sie benötigen diese zu aktualisieren, wenn das Fenster passt die Größe; wenn Sie mit Set GLUT ein glutReshapeFunc und die Projektionsmatrix in dort neu zu berechnen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top