Was die OpenGL-Koordinaten sind? Ignorieren OpenGL-Fenster Größe
Ich habe gerade den Versuch gestartet zu folow einfachen "ziehen-cube" openGl tutorial. Nach dem endgültigen Sieg über erste OpenGL zu arbeiten, ich habe noch sehr veird Ergebnisse. Mein problem ist, dass die Objekte neigen dazu, um die Größe sich entsprechend der Fenstergröße. Stattdessen möchte ich die Größe des Fensters bestimmen, die rendering-Bereich - je größer das Fenster, desto mehr können Sie sehen.
Hier sind einige screenshots des Größenänderung:
Normale Größe
Geändert
Bilder werden als links absichtlich!
Diese auto-resizing-Verhalten mit sich bringt, eine Frage, was die Koordinaten in OpenGL sind.
- Haben Sie einen Blick auf dieses question. Ich denke, es behandelt, was Sie gefragt haben.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erste Sache, zum im Verstand zu halten: OpenGL ist ein drawing-API. Es nicht pflegen eine Szene oder sowas.
Also, was OpenGL macht, ist, er ordnet geometrie-Eingabe von Koordinaten in form von vertex-Attributen, um Platz auf dem Bildschirm. In der alten Feste Funktion es gibt eine spezielle vertex-Attribut namens "vertex-position" oder nur kurz "vertex" (der eigentliche Scheitelpunkt ist mehr als nur die position).
Die position verwandelt sich zum Fenster Raum in eine drei-Schritt-Prozess:
1. Transformation in den Blick/Augen-Abstand: Diese erfolgt durch die Multiplikation der vertex-position mit der modelview-matrix.
Bestimmten weiteren Berechnungen, wie die Beleuchtung die Berechnung erfolgt in view-space.
2. Transformation in clip-space: Der Weltraum-position verwandelt sich in clip-space. Dies ist in der Regel als die Projektion und treffend die matrix beschreibt diese transformation wird als die Projektions-matrix
Im clip-Raum einige Besondere Dinge passieren, zusammengefasst als eine Beschneidung, die Sie nicht haben, um über sorgen noch.
3. Im letzten Schritt verwandelt sich der beschnittene geometrie in normalisierten gerätekoordinaten (NDC). NDC-space ist praktisch eine 1:1-Zuordnung in Richtung der viewport, d.h. die Grenzen des NDC Volumen entsprechen direkt den offset und die dimension des viewport-set mit glViewport.
Sie können nicht ändern die Art und Weise der 3. Schritt passiert, und der 1. Schritt ist reserviert für die Umwandlung der Dinge in Aussicht Raum. Also keine Anpassungen geschehen muss im 2. Schritt.
So, hier ist, was Sie zu tun haben: Die Projektion der Grenzen muss direkt proportional zu der viewport-Blöcke. Wie dies zum Beispiel
Oh, und nur auf einen Allgemeinen Hinweis: Sie sollten immer setzen Sie den viewport und Projektion setup in der Zeichnung Funktion zu. Wenn Sie sehen, ein tutorial, stellt diese Aussagen in einem Fenster-resize-handler, ignorieren Sie es und tun Sie es einfach in die Zeichnung code sowieso. Langfristig ist dies wirklich eine Vereinfachung.
Der interessante Teil:
Im Kontext:
glutInitWindowSize()
) so dass ich dachte, das ist die Größe, die Sie wollte-stick mit.