Wenn ich das Fenster vergrößere / verkleinere wird der Bereich in dem OpenGL zeichnet zwar angepasst (der Hintergrund wird gezeichnet), allerdings bleibt das gezeichnete Viereck gleich groß. Vergrößere ich dieses manuell, so wird es an der alten Fensterkante abgeschnitten. Im Anhang habe ich entsprechende Screenshots hochgeladen.
Folgender Code wird beim Vergrößern ausgeführt:
Code:
glViewport(0, 0, ClientWidth, ClientHeight);
glMatrixMode(GL_PROJECTION);
glLoadIdentity;
glOrtho(0,1024,0,768,0,128);
glMatrixMode(GL_MODELVIEW);
IdleHandler(Sender, tmpBool);
Das sollte meiner Meinung nach richtig sein. Hat jemand eine Idee, wo der Fehler liegen könnte?
Zu meiner Umgebung:
IDE: Lazarus 1.0.12 (64 Bit) Compiler: fpc 2.6.4 DGL: 4.4 (aktuellste Version) OS: Win 7 HP 64Bit Graka: Intel GMA 4500MHD (aktuell 160 MB shared RAM; Treiber Version 8.15.10.2302 - angeblich die aktuellste) CPU: Intel Core 2 Duo SU7300
Vielen Dank im Voraus
MfG
Wuppertaler
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Dies entspricht größtenteils den ersten beiden Tutorials (Quickstart + 1) - einige unnötige Befehle habe ich bei der Fehlersuche gelöscht oder auskommentiert. Hier ist die Quadratgröße manuell vergrößert - es handelt sich also um den Quelltext von Screenshot 3.
Registriert: Di Apr 29, 2008 18:56 Beiträge: 1213
Programmiersprache: Delphi/FPC
Da haben wir den Fehler, sowas hab ich mir schon gedacht. Mit glOrtho sagst du, das dein 2D-Bereich 1024x768 Pixel groß ist, aber beim Zeichnen des Quad rechnest du die Größe des Fensters mit ein. Wenn du ein Bildschirmfüllendes Quad zeichen willst hast du 2 Möglichkeiten: 1. glOrtho auf feste Werte setzen (so wie jetzt) und das Quad mit genau den selben Werten zeichnen (also bei dir 1024x768) 2. glOrtho an die Größe des Fenster anpassen (mit ClientWidth und ClientHeight) und dann auch das Quad abhängig zur Fenstergröße zeichnen. Welches der beiden Fälle für deine Anwendung besser geeignet ist musst du dann entscheiden, das hängt teilweise von der Anwendung ab. Mit der 2. Methode hättest du das gleiche Verhalten wie bei normalen Oberfläschen-Programmen.
Diese Größenanpassung habe ich wie schon geschrieben nur testweise eingebaut. Der 2. Screenshot zeigt das Ergebnis, wo Zeile 116-121 korrekt sind:
Code:
glBegin(GL_QUADS);
glColor3f(1, 0, 0); glVertex3f( 0, 0, 0);
glColor3f(0, 1, 0); glVertex3f(1024, 0, 0);
glColor3f(0, 0, 1); glVertex3f(1024, 768, 0);
glColor3f(1, 1, 0); glVertex3f( 0, 768, 0);
glEnd;
Dennoch wird der genutzte Zeichenbereich wie in Screenshot 2 gezeigt nicht vergrößert. Bei gluPerspective ist dies übrigens der Fall.
Skaliere ich sowhol in glOrtho, als auch beim Zeichnen wird de fakto ebenfalls nicht skaliert. Das Ergebnis sieht identisch aus. Auch dort habe ich stattdessen einen blauen Rand in dem ich nix rendern kann bzw. wo das gerenderte einfach nicht angezeigt wird, da es für die Graka vermutlich außerhalb des Frustrums liegt. Die genannte Anpassung diente übrigens genau dazu - also dazu im den blauen Bereich etwas zu rendern.
Registriert: Mi Nov 30, 2011 21:41 Beiträge: 136 Wohnort: Bad Vilbel
Programmiersprache: Delphi 7
Prinzipell machst alles richtig, aber da der Fehler ja irgendwo liegen muss würde ich an deiner stelle mal ein breakpoints setzen und schauen ob auch alles richtig aufgerufen wird.
P.S. Die Idle-Funktion kann man auch ohne das @ setzen, zu mindestens bei mir. Ist zwar wahrscheinlich nicht der fehler, aber das was du beschreibst könnte entweder daher kommen, dass der viewport nicht geändert wird, oder du nur einmal zeichnest.
Mitglieder in diesem Forum: 0 Mitglieder und 4 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.