OpenGL: Ortho-Projektion von der Seite
-
Hallo! Ich habe ein Dreieck in der XY-Ebene (alle Vertex-Z-Koordinaten sind Null). Nun möchte ich das perfekt von der Seite sehen, es soll also nur noch eine Linie sichtbar sein.
Vorerst muss ich mich an die OpenGL-Legacy-API halten. Wie würdet ihr hier vorgehen? Ich hab sowas versucht:
glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0, width, 0, height, -1e10, 1e10); glRotatef(90, 1, 0, 0);
Das funktioniert soweit auch, scheinbar passiert es aber ab und zu, dass die Dreiecke auf eine Zeile ausserhalb des Framebuffers gerendert werden. Wie sieht der richtige Ansatz aus?
Danke im Voraus
-
Fangen wir mal damit an, dass nach deinem glOrtho die Projektionsmatrix deines Kontextes nur einmalig gesetzt werden muss. Sie kann also von den Transformationen getrennt werden.
Die Rotation wird sich wohl noch ändern und andere Transformationen dazukommen, deswegen sollten sie in jedem Render-Durchgang aufgerufen werden, jedoch auf der Modelview-Matrix, welche dafür vorgesehen ist.Ohne weiteren Code kann ich deinen Fehler nicht ausmachen. Ich kann nur schätzen, dass nicht alle deine Dreiecke im Ursprung liegen und deswegen nicht nur um sich selbst rotiert werden, sondern auch aus dem Bild heraus.
-
Ein Dreieck hat keine Dicke, folgedessen wirst du auch keine Linie sehen, sondern gar nix...
-
Youka schrieb:
deswegen sollten sie in jedem Render-Durchgang aufgerufen werden, jedoch auf der Modelview-Matrix, welche dafür vorgesehen ist.
Die Rotation bleibt konstant. Sollte man nicht die Projection-Matrix verwenden, um die Ansicht zu verändern?
dot schrieb:
Ein Dreieck hat keine Dicke, folgedessen wirst du auch keine Linie sehen, sondern gar nix...
Doch, denn ich benutze GL_LINES, zeichne also nur die Dreieckskanten. Ich erwarte eine Linie von einem Pixel Breite, was so auch auftritt -- aber eben teilweise ausserhalb des Framebuffers.
Würde die Reihenfolge der Transformationen von Ortho und Rotation so überhaupt stimmen?
-
Martin47 schrieb:
Die Rotation bleibt konstant. Sollte man nicht die Projection-Matrix verwenden, um die Ansicht zu verändern?
Die Projektionsmatrix dient, wie der Name schon sagt, der passenden Projektion auf die Ziel-Oberfläche und wird nach der Modelview-Matrix angewendet. Man kann es auch so ausdrücken, dass sie die Koordinaten uminterpretiert.
Die Modelview-Matrix ist für die Modell-Ansicht zuständig, wozu die Bewegung im Raum gehört.Martin47 schrieb:
Würde die Reihenfolge der Transformationen von Ortho und Rotation so überhaupt stimmen?
Ich kann mich nur wiederholen: Zeig mehr Code, sonst kann man dir nicht helfen. Der Fehler liegt ganz offensichtlich wo anders.