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

Aktuelle Zeit: Mi Jul 16, 2025 15:35

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



Ein neues Thema erstellen Auf das Thema antworten  [ 13 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: glOrtho = Koordinaten?
BeitragVerfasst: Mo Feb 21, 2005 22:07 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Feb 21, 2005 21:59
Beiträge: 33
Hi Leute,

Bin grad dabei ein kleinen 2D-Weltraumshooter zu proggen und mir stellt sich die Frage, ob die Werte in glOrtho ( 0,800,0,600,-1,1) auch die max. X/Y Koordinatenwerte sind.
Hab das mal ausprobiert aber wenn ich nen Quad auf 800,600 zeichnen will wird es nicht dargestellt. :(
Wie erreiche ich das dann, dass meine X-Werte von 0 bis 800 und meine Y-Werte 0 bis 600 gehen können und dieses auch direkt die Bildschirmkoordinaten sind damit zumindest ein Teil des Objektes dargestellt werden kann?

Danke euch

Leo


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Feb 21, 2005 22:18 
Offline
DGL Member

Registriert: Mi Dez 15, 2004 20:36
Beiträge: 454
Wohnort: Wien, Österreich
Code:
  1.  
  2. procedure glResizeWnd(Width, Height : Integer);
  3. begin
  4.   if (Height = 0) then Height := 1;   // prevent divide by zero exception
  5.  
  6.   glViewport(0, 0, Width, Height);    // Set the viewport for the OpenGL window
  7.   glMatrixMode(GL_PROJECTION);        // Change Matrix Mode to Projection
  8.   glLoadIdentity();                   // Reset View
  9.  
  10.   glOrtho(0,Width,0,Height,-10,10);  //
  11.  
  12.   glMatrixMode(GL_MODELVIEW);         // Return to the modelview matrix
  13.   glLoadIdentity();                   // Reset View
  14.  
  15.  
  16. end;
  17.  

Vielleicht so? :wink:

_________________
"Meine Mutter sagt : 'Dumm ist der, der Dummes tut'." - Forrest Gump


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Feb 21, 2005 22:38 
Offline
DGL Member

Registriert: Sa Jan 22, 2005 21:10
Beiträge: 225
Was du machst ist richtig. Musst nur dran denken, dass du bei den Vertices dann auch die richtige Tiefe (in deinem Fall alles zwischen -1 und 1) angibst.

Und du musst darauf Achten, dass du die Projectionsmatrix vorher auch initialisierst.

Code:
  1.  
  2. glMatrixMode(GL_PROJECTION);
  3. glLoadIdentity;
  4. glOrtho ( 0,800,0,600,-1,1)
  5. glMatrixMode(GL_MODELVIEW);
  6. glLoadIdentity;
  7.  
  8.  


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 22, 2005 08:25 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 12, 2002 07:15
Beiträge: 916
Wohnort: Dietzhölztal / Hessen
Programmiersprache: C/C++, Obj-C
Außerdem musst Du bedenken, das Du zwar im glOrtho die Koordinaten so "hindrehen" kannst wie Du sie benötigst (also 0, 0 in der linken, oberen Ecke), andere Funktionen jedoch (wie z.B. glScissor) den Punkt 0,0 dennoch in der linken, unteren Ecke haben. Kann recht verwirrend sein am Anfang.

_________________
Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 22, 2005 16:15 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Feb 21, 2005 21:59
Beiträge: 33
Danke erstmal für die Antworten!

Also wenn ich das richtig verstanden hab kann ich nachdem ich:

Code:
  1.  
  2. procedure glResizeWnd(Width, Height : Integer);
  3. begin
  4.   if (Height = 0) then Height := 1;   // prevent divide by zero exception
  5.  
  6.   glViewport(0, 0, Width, Height);    // Set the viewport for the OpenGL window
  7.   glMatrixMode(GL_PROJECTION);        // Change Matrix Mode to Projection
  8.   glLoadIdentity();                   // Reset View
  9.  
  10.   glOrtho(0,Width,0,Height,-10,10);  //
  11.  
  12.   glMatrixMode(GL_MODELVIEW);         // Return to the modelview matrix
  13.   glLoadIdentity();                   // Reset View
  14.  
  15.  
  16. end;  
  17.  


geschrieben hab mit:
Code:
  1. glLoadIdentity();// Reset The View
  2. glTranslatef(0,0,0.0);
  3. glColor3f(0.0,1.0,0.0);// Set Player Color To Light Green
  4. glBegin(GL_LINES);// Start Drawing Our Player Using Lines
  5. glVertex2d(0,0);// Top Left Of Player
  6. glVertex2d(width, height);// Bottom Right Of Player
  7. glEnd();

Eine Linie von unten links bis oben rechts zeichnen.
Dummerweise trifft die Linie nicht ganz die ecke:
Habt ihr ne idee wie ich erreichen kann, dass die Ecke des schwarzen bildschirms die koordinaten (800;600) hat?


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 22, 2005 16:21 
Offline
DGL Member

Registriert: Do Nov 20, 2003 19:52
Beiträge: 48
Wohnort: Tillingen bei Chemnitz
Die Linie trifft schon genau die Ecke des Fensters, dummerweise liegt da ne Windowsleiste drüber ;]
Versuch mal beim Zeichnen anstatt Width, Height besser ClientWidth, ClientHeight zu nehmen, dann müssts passen.

_________________
...die Idee ist gut, doch die Welt noch nicht bereit...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 22, 2005 16:24 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 14, 2004 18:56
Beiträge: 804
Wohnort: GER/OBB/TÖL-WOR/Greiling
es gibt auch eine funktion, mit der du die titelleiste wegmachen kannst. du musst irgendwas mit dme attribut ws_border aufrufen. leider weiss ich nicht mehr, wie die hiess....

_________________
Bild

"User Error. Replace User and hit Continue."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 22, 2005 16:27 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Feb 21, 2005 21:59
Beiträge: 33
Was muss ich denn dafür einbinden?
Weil ClientWidth oder ClientHeight kennt er noch nicht.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 22, 2005 16:42 
Offline
DGL Member

Registriert: Do Nov 20, 2003 19:52
Beiträge: 48
Wohnort: Tillingen bei Chemnitz
Oh ich seh grade deine Resize-Funktion sieht so aus als ob du die API-Variante verwendest, davon hab ich leider so gut wie keinen Plan. Wenn du die VCL nutzt sind ClientWidth und ClientHeight Eigenschaften der Form, welche die 'wirklich' nutzbare Fensterfläche angeben, dh. ohne die Windowsleiste.

_________________
...die Idee ist gut, doch die Welt noch nicht bereit...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 22, 2005 16:43 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Feb 21, 2005 21:59
Beiträge: 33
Jap! Benutze WinAPI :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 22, 2005 17:01 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 28, 2002 19:27
Beiträge: 568
Wohnort: Chemnitz / Sachsen
bei der api gibt es die möglichkeit über (glaube) SYsMetric (...) die größe der titelleiste rauszufinden und dann dein form halt ein bisschen größer zu machen, als 800x600 und zwar genau um soviel höher wie die titelleiste hoch ist ...

_________________
Aktuelles Projekt :
www.PicPlace.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 22, 2005 18:51 
Offline
DGL Member

Registriert: Mi Dez 15, 2004 20:36
Beiträge: 454
Wohnort: Wien, Österreich
Code:
  1.  
  2. function GetClientRect( myHWND: HWND,   // handle of window
  3.                                  var R: TRect   );      // address of structure for client coordinates
  4.  


Benutze das und dann ist die grösse so zu ermitteln:

Code:
  1.  
  2. var R:TRect;
  3.       width, height : integer;
  4.       handle : HWND;
  5. //---
  6. begin
  7. //.....
  8. // Handle muss vorher bestimmt werden durch CreateWindow oder CreateWindowEx //
  9. GetClientRect(Handle, r );
  10.  
  11. Width := r.right - r.left;
  12. Height :=  r.bottom - r.top;
  13. glResizeWnd(Width, Height);
  14. // zeichnen
  15. end;
  16.  

_________________
"Meine Mutter sagt : 'Dumm ist der, der Dummes tut'." - Forrest Gump


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 23, 2005 09:02 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 12, 2002 07:15
Beiträge: 916
Wohnort: Dietzhölztal / Hessen
Programmiersprache: C/C++, Obj-C
Und wenn du ein Fenster möchtest, welches einen Client-Bereich von x*y hat unabhängig vom Border, dann schau dir mal die Funktion AdjustWindowRect(Ex) an. Diese Berechnet dir anhand der übergebenen Styles, die Maße des Fensters um 'ne gewünschten Client-Größe zu erhalten!

_________________
Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?


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


Wer ist online?

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