ich benutze für eine Gui Darstellung glOrtho auf das ganzen Fenster. Um ähnliche - zusammengesetzte Anzeige-Elemente - darzustellen, benutze ich zum Zeichnen eine Schleife in der ich den Viewport auf die entsprechende Stelle setze und dann immer mit den gleichen Koordinaten das Anzeige-Element zu rendern. Leider kann ich glOrtho dafür nicht auf einen kleineren Bereich stellen sondern muß die Koordinaten immer mit der Fenstergröße verrechnen. Meine Frage ist kann man eine mit glOrtho gemachte Einstellung ändern und dann wieder zurück?
Ich hoffe man kann den Kauderwelsch verstehen.
Zuletzt geändert von Twist am Fr Sep 19, 2014 21:37, insgesamt 1-mal geändert.
Registriert: Di Apr 29, 2008 18:56 Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,
Twist hat geschrieben:
Leider kann ich glOrtho dafür nicht auf einen kleineren Bereich stellen sondern muß die Koordinaten immer mit der Fenstergröße verrechnen.
Warum? du kannst doch einfach die Breite vom Viewport und die Breite von glOrtho halbieren und dann 2x nebeneinander malen.
Ansonsten ist die Projektions-Matrix auch ein ganz normaler Matrix-Stack, wie die Model-Matrix auch. Heißt glPushMatrix und glPopMatrix gehen hier genauso. Damit kannst du die Einstellungen sozusagen speichern und laden
Registriert: Mo Nov 08, 2010 18:41 Beiträge: 769
Programmiersprache: Gestern
Ich glaub da hast du was falsch verstanden.
glViewport gibt an wie die normalisierten Koordinaten (also -1.0,-1.0 bis 1.0,1.0) in Fensterkoordinaten umgerechnet werden. glScissor setzt das Rechteck in dem Pixel modifiziert werden dürfen. glOrtho setzt nur eine Matrix mit der deine Vertexdaten in normalisierte Koordinaten umgerechnet werden.
Code:
glOrtho(0,200,0,190,-20,20);
multipliziert einfach nur x und y mit 2/200 und 2/190 und zieht jeweils 1 ab.
Registriert: Di Apr 29, 2008 18:56 Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,
da die beiden Bereiche ineinander liegen brauchst du glOrtho und den Viewport nichma neu setzen. Es reicht wenn du deine Model-Matrix bzw. deine Vertices dementsprechend manipulierst, das du nur in deinem 200x190 großen Rechteck zeichnest. Mit glScissor kannst du dann noch begrenzen das nicht über den Rand gezeichnet wird. So würde ich es machen. Die Alternative wäre glOrtho UND den Viewport zu setzen, das beides pixelgenau und durch einen Rand begrenz ist.
da die beiden Bereiche ineinander liegen brauchst du glOrtho und den Viewport nichma neu setzen. Es reicht wenn du deine Model-Matrix bzw. deine Vertices dementsprechend manipulierst, das du nur in deinem 200x190 großen Rechteck zeichnest.
So mache ich es bereits. Ich wollte nur wissen, ob nicht eine 'elegantere' Lösung möglich ist und ich mich dafür nur zu prasselig anstelle.
Mitglieder in diesem Forum: 0 Mitglieder und 29 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.