Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 08:43

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Perspektive nach glOrtho verstellt.
BeitragVerfasst: So Mai 01, 2005 18:10 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
Hi!

Habe mir 2 proceduren geschrieben um einfacher zwischen Ortho und 3D wechseln zu können.

Code:
  1. procedure TGLForm.switch_to_ortho();
  2. begin
  3.   glViewport(0, 0, ClientWidth, ClientHeight);
  4.   glMatrixMode(GL_PROJECTION);
  5.   glLoadIdentity;
  6.     glortho(0,800,0,600,0,10);
  7.   glMatrixMode(GL_MODELVIEW);
  8.  
  9.   glLoadIdentity;
  10. end;
  11. procedure TGLForm.switch_to_normal();
  12. begin
  13.   glViewport(0, 0, ClientWidth, ClientHeight);
  14.   glMatrixMode(GL_PROJECTION);
  15.   glLoadIdentity();
  16.   gluPerspective(45, ClientWidth/ClientHeight, 1, 100);
  17.   glMatrixMode(GL_MODELVIEW);
  18.   glLoadIdentity;
  19. end;


Wenn ich nun die 2 Aufrufe ist die Perspektive anschliessend verstellt, aber ich gebe die gleichen werte bei gluPerspective ein

_________________
www.audi32.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mai 02, 2005 09:33 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Hm...eventuell die Matrizen vorher mit glLoadIdentity zurücksetzen... .

EDIT: Ich bin blind ich weiß... :oops:

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Zuletzt geändert von Flash am Mo Mai 02, 2005 22:46, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mai 02, 2005 14:44 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 19, 2004 00:27
Beiträge: 454
Wohnort: Nürnberg
Was für eine Bildschirmauflösung hast du? Einmal benutzt du 800x600 und einmal ClientWidth u. ClientHeight


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mai 02, 2005 15:21 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Bei glOrtho ist das keine richtige Auflösung. Sondern eher nur das was er als Auflösung für den OpenGL bereich verwenden soll. [edit]Bei der Perspektive wird das aber nur für das Seitenverhältnis benötigt.[/edit]

glOrtho verwende ich so. Allerdings muss ich fairerweise zugeben, dass ich erst beim nächsten Bild wieder etwas gezeichnet habe. Kann also nicht sagen ob sich das evtl anders verhält. Zu Häufiges wechseln solltest du im übrigen vermeiden, da es sehr zeitaufwändig ist.
Code:
  1. procedure TRenderThread.End2D;
  2. begin
  3.   // Zurück in den 3D-Modus
  4.   glMatrixMode(GL_PROJECTION);
  5.   glPopMatrix;
  6.   glMatrixMode(GL_MODELVIEW);
  7.   glPopMatrix;
  8. end;
  9.  
  10.  
  11. procedure TRenderThread.Start2D(Width, Height: Integer);
  12. begin
  13.   // In den OrthoMode wechseln
  14.   glMatrixMode(GL_PROJECTION);
  15.   glPushMatrix;
  16.   glLoadIdentity;
  17.   glOrtho(FLeft, Width, Height, FTop, -1, 100);
  18.   glMatrixMode(GL_MODELVIEW);
  19.   glPushMatrix;
  20.   glLoadIdentity;
  21. end;


Vorher ist normale Perspektive aktiviert.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mai 02, 2005 17:43 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
Danke für eure Antworten.
Ich habe das auch mal auf deine Art nun versucht.
Allerdings ist das nicht anders(also anders schon, verschiebt sich trotzdem, nur nicht genauso)
Und der Witz bei der sache ist, dass ich danach auch nichts anderes mehr zeichne.

Code:
  1.   glinitnames;
  2.   glpushname(0);
  3.  
  4.  
  5.   planetenzahl := Planeten.GetCount();
  6.   if planetenzahl > 0 then
  7.   for i := 0 to planetenzahl do
  8.   begin
  9.     if Planeten.SelPlanet = i then
  10.       glcolor3f(0,1,1)
  11.     else
  12.       glColor3f(1,1,1);
  13.  
  14.     glloadname(i);
  15.     glBegin(gl_triangles);
  16.       glVertex3f(Planeten.Planets[i].x  , Planeten.Planets[i].y  , Planeten.Planets[i].z  );
  17.       glVertex3f(Planeten.Planets[i].x-1, Planeten.Planets[i].y-1, Planeten.Planets[i].z-1);
  18.       glVertex3f(Planeten.Planets[i].x+1, Planeten.Planets[i].y-1, Planeten.Planets[i].z+1);
  19.     glEnd();
  20.  
  21. //glpushmatrix();
  22. glEnable(GL_TEXTURE_2D);
  23.   InGameMenu.Render();  //Hier an dieser Stelle wird in der Procedure glOrtho eingestellt gezeichnet und zurück gestellt ... also warum dieser Fehler.
  24. glDisable(GL_TEXTURE_2D);
  25. //glpopmatrix();

_________________
www.audi32.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mai 02, 2005 19:11 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ich weiß nicht ob dir das evtl etwas hilft aber in meiner Renderschleife habe Pusche ich noch mal die Modelview matrix. Also in etwa so.

Code:
  1.   glMatrixMode(GL_MODELVIEW);
  2.   glLoadIdentity();
  3.   glPushMatrix;
  4.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  5.  
  6.   // rendern
  7.  
  8.   glPopMatrix;


Damit sollte es immer alles zurückgesetzt werden. Zu mindest was die darstellung angeht. Dürfte zwar ein wenig overhead sein, aber ich habe das schon ne ganze Weile in meinen Code. Ich weiß zwar nicht mehr genau warum ich das mal eingeführt hatte aber es muss ja nen Grund gehabt haben. ;-) (hoffe ich jedenfalls)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mai 02, 2005 22:48 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Eventuell passiert irgendwas außerhalb. Vielleicht ein Resize oder irgendwas. Dein Code sieht in meinen Augen nämlich korrekt aus. :?

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mai 05, 2005 09:35 
Offline
DGL Member
Benutzeravatar

Registriert: So Feb 06, 2005 17:29
Beiträge: 187
Programmiersprache: C, C++
Ich bin mir jetzt nicht sicher,
aber könnte es nicht sein, dass die Verschiebung dadurch zustande kommt, dass im Projektionsmodus der Ursprung in der Mitte des Bildschirms befindet und in dem von Adler bestimmten Orthomodus in einer Bildschirmecke.

Ich hab das nämlich schon mal gemacht (auch mit gleicher Szene) und es hat prima funktioniert, man muss halt aufpassen, da die Objekte ihre Größe nicht mit der Entfernung ändern. Ausserdem habe ich im Orthomodus den Ursprung auch in die Mitte des Bildschirms gelegt.
Die Szene bestand aus einem einfachen Würfel mit der Seitenlänge 2. Den Orthomodus habe so gesetzt:

Code:
  1.  glOrtho(-10, 10, -10, 10, 0, 100);


Ich hoffe ich habe das Problem einigermaßen erkannt und nicht irgendeinen Schwachsinn geschrieben :?

_________________
Flummi: Projektseite und Projektthread


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mai 05, 2005 10:35 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
Mh, Eigentlich nicht, da die 2 ja unabhängig zueinander sein müssten.
Standart ists so wie ichs gemacht hab.
Und ich kann drum herum so viel pushen wie ich will, bringt nichts.

_________________
www.audi32.de


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: Bing [Bot], Google [Bot] und 16 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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 15 Queries | GZIP : On ]