Proportionen erhalten - OpenGL

3D-Visualisierung mit der Open Graphics Library (OpenGL)
Antworten
Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Proportionen erhalten - OpenGL

Beitrag von cloidnerux » So Sep 20, 2009 7:19 pm

Mein Problem sieht wie folgt aus:
Ich habe ein OpenGL Fenster mit C# und dem Tao Framework.
Dies Funktioniert auch super, nur wird beim verändern der Größe die Proportionen nicht erhalten, das heißt das Bild wird verzehrt.
Ich habe schon gluPerspective, glViewport, glOrth in allen Variationen ausprobiert, doch jedesmal mit dem selben Ergebnis.
Auch hatte ich versucht aus der Veränderung der größe einen Faktor zu bestimmen und eine entsprechende Skalierung durchzuführen, doch das resultierte in Fehldarstellungen und zu großen Objekten.

Danke für Hilfe.
MfG cloidnerux.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Proportionen erhalten - OpenGL

Beitrag von Kerli » So Sep 20, 2009 9:14 pm

cloidnerux hat geschrieben:Dies Funktioniert auch super, nur wird beim verändern der Größe die Proportionen nicht erhalten, das heißt das Bild wird verzehrt.
Ich weiß nicht wie du das jetzt genau machst, aber der normale Weg ist zuerst mit glViewport die neue Größe des Fensters zu wählen und dann zb. mit gluPerspective eine perspektivische Projektion zu setzen. Du musst beim setzen der Projektion nur aufpassen, dass du auch den richtigen Matrizenstack auswählst.
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Proportionen erhalten - OpenGL

Beitrag von cloidnerux » Mo Sep 21, 2009 2:35 pm

So sieht meine Resize Routine aus:

Code: Alles auswählen

Gl.glMatrixMode(Gl.GL_PROJECTION);
Gl.glLoadIdentity();
Gl.glViewport(0, 0, width, height);
Glu.gluPerspective(60.0f, (float)height / (float)width, 1.0f, -1.0f); 
Gl.glMatrixMode(Gl.GL_PROJECTION);
Gl.glLoadIdentity();
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Proportionen erhalten - OpenGL

Beitrag von Kerli » Mo Sep 21, 2009 2:38 pm

cloidnerux hat geschrieben:So sieht meine Resize Routine aus:
Und wie soll das bitte funktionieren wenn du in den letzten beiden Zeilen die Projektionsmatrix erst wieder auf die Einheitsmatrix setzt?
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Proportionen erhalten - OpenGL

Beitrag von cloidnerux » Mo Sep 21, 2009 2:58 pm

Wenn ich die letzte Zeile auf Modelview umsetzte, erhalte ich einen weißen Bildschirm, es wird nichts gezeichnet.
Ich habe Probehaber alle Transfomartionen herausgenommen, was aber nichts half.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Proportionen erhalten - OpenGL

Beitrag von Kerli » Mo Sep 21, 2009 3:24 pm

cloidnerux hat geschrieben:Wenn ich die letzte Zeile auf Modelview umsetzte, erhalte ich einen weißen Bildschirm, es wird nichts gezeichnet.
Da fällt mir noch was auf: Die Parameter von gluPerspective sind ungültig. Lies doch einmal in der Dokumentation was dort über 'zNear' bzw. vor allem über 'zFar' steht. Es macht doch irgendwie wenig Sinn für eine Clippingebene einen negativen Abstand zum Betrachter an zu geben...
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Antworten