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

Aktuelle Zeit: Fr Jul 18, 2025 12:35

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



Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: An Fenstergröße anpassen
BeitragVerfasst: Sa Aug 09, 2008 17:14 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
hi,

Ich handhabe es in meiner 2D Anwendung so, dass ich unter einer bestimmten Auflösung entwickle, es dann aber auf jeder Auflösung gleich aussehen soll. (sprich das Bild wird gestreckt oder gestaucht) Früher habe ich das immer für jedes Objekt einzeln berechnet. Jetzt suche ich nach einer Möglichkeit, das Ganze mit glScalef zu realisieren, wie mache ich das ? Ich habe alte und neue größe des Fensters.
Code:
  1.   glScalef(clientwidth / StartWidth, clientheight / StartHeight, 1);
sorgt lediglich dafür, dass es nicht zusammenschrumpft wenn ich das Fenster vergrößere.

mfg


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Aug 09, 2008 17:20 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
Wenn ich dein Problem richtig verstanden habe, würde ich in der Projektionsmatrix (sprich wahrscheinlich glOrtho() oder gluOrtho2D()) einfach deine Entwicklungsauflösung eintragen, dann musst du an den Objektkoordinaten gar nichts ändern.

MfG


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Aug 09, 2008 17:53 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
Wenn ich
Code:
  1.   glOrtho(0, StartWidth, StartHeight, 0, 0, 100);
benutze und meinen glScalef weglasse bekomme ich das gleiche wie bei
Code:
  1.   glOrtho(0, clientwidth, clientheight, 0, 0, 100);
mit meinem glScalef.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Aug 09, 2008 19:11 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
Und das funktioniert nicht wie gewünscht? Setzt/Modifizierst du vielleicht irgendwo nochmal die Matrix?

MfG


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Aug 09, 2008 19:23 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
der befehl wird vor jedem rendern aufgerufen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Aug 09, 2008 22:11 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
glOrtho mit fester Auflösung sollte eigentlich die Lösung sein.
Gib mal ein Bild mit fester Auflösung.

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Aug 10, 2008 22:29 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
So sieht das Ganze aus: http://www.exec-dev.de/test/screen.jpg

Wenn ich die Größe zur Designzeit anpasse wird wenigstens nichts verschoben, allerdings wird auch nur der Bildausschnitt größer.

mfg


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 11, 2008 08:11 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also ich muss gestehen ich bin gerade ein bisschen konfus. Es kann daran liegen, dass mein Kaffee noch vor mir steht und ich zu müde bin.

Aber du hast 2 Möglichkeiten.
Code:
  1. glOrtho(0, ClientWidth, ClientHeight, 0, ...)

Hierbei handelt es sich um eine pixelgenaue Darstellung. Die OpenGL Einheiten werden genau auf 1 Pixel gemappt. Und so sieht dein Bild auch aus.

Code:
  1. glOrtho(0, 640, 480, 0, ...)

Hier sind die Werte für den sichtbaren Bereich im Bereich von 0..640 und 0..480. Egal wie groß das Fenster ist. Ein Quad in der Größe von 640x480 würde immer den gesammten Bildschirm bedecken.

Für dein Spiel wäre vermutlich die zweite Variante die bessere Wahl. Da du so immer den passenden Bildschirmausschnitt sehen würdest. Allerdings. Je nach Größe des Fensters stimmt das Seitenverhältniss nicht mehr. Entweder wäre alles in die Höhe oder in die Breite gezogen. Das sieht dann mitunter nicht mehr so schön aus. Aber das bekommt man mit ein bisschen rechnen und glOrtho auch in den Griff. Die Schrift hingegen (wenn ich richtig interpretiere was du benutzt) ist noch nicht für Skalierungen ausgelegt. Aber das nur mal am Rande.

Bei beiden Methoden kommst du aber ohne ein glScale aus. Also wenn das noch irgendwo enthalten ist dies bitte ein bisschen entfernen. Bzw fällt mir gerade auf. Setzt du glViewport auch auf eine feste Größe oder über die gesammte Fenstergröße (ClientBlah)? Der muss ja weiterhin über die gesammte Größe des Fensters gehen. Also mit ClientWidth und ClientHeight.


Wenn das das ist was du wolltest es aber nur nicht geht, dann stimmt irgendwas anderes nicht. Evtl. wird die Projektion zurückggesetzt oder so. Da hilft dann nur ein bisschen mehr Code.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 11, 2008 09:55 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
Mehr Code ;)
Init2D
Code:
  1. procedure TForm1.Init2D;
  2. begin
  3.   glMatrixMode(GL_PROJECTION);
  4.   glLoadIdentity();
  5.   glOrtho(0, Frustrum.width, Frustrum.Height, 0, 0, 100); // 0 Nearclipping; 100 Farclipping
  6.   glMatrixMode(GL_MODELVIEW);
  7.   glLoadIdentity();
  8. end;


OnIdle
Code:
  1. procedure TForm1.IdleHandler(Sender: TObject; var Done: Boolean);
  2. begin
  3.   MTimer.Update;
  4.   glClear(GL_COLOR_BUFFER_BIT Or GL_DEPTH_BUFFER_BIT);
  5.   Init2D;
  6.   glPushMatrix;
  7.     RENDER ETC.
  8.   glPopMatrix;
  9.   DrawText;
  10.   CheckError;
  11.   Swapbuffers(DC);
  12.   FPSCounter.Update;
  13.   Done := false;
  14. end;


mfg


Zuletzt geändert von Seth am Mo Aug 11, 2008 11:54, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 11, 2008 10:11 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Hmmmm. Okay. Irgendwie sagt mir der Code gerade mal so gar nichts. Allerdings frage ich mich was die Kamera da macht? Und schau mal wie es sich verhält, wenn du die Größe des Fensters veränderst. Bleibt der Bereich immer unten links? Ist er immer gleich groß? Hattest du mal nach glViewport geschaut? Also wie das gesetzt wird. So aktuell kann ich für meinen Teil nur raten. Und da habe ich ehrlich keine große Lust zu. :P


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 11, 2008 10:35 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
Immer unten links und immer gleich groß. Setzen des Viewports bringt auch keine Änderung.

€: So gehts:
Code:
  1.   glViewport(0, 0, clientwidth, clientheight);
  2.   glOrtho(0, Frustrum.width, Frustrum.Height, 0, 0, 100); // 0 Nearclipping; 100 Farclipping


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 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 | 14 Queries | GZIP : On ]