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

Aktuelle Zeit: Sa Jul 05, 2025 13:03

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 21 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Sa Sep 27, 2008 08:29 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Nein. Das musst du nicht in eine Textur rendern. Würde auch nichts bringen, denn die OpenGL Flächen sind schon so flach wie eine Textur. Sind ja auch nichts anderes. Mit glOrtho stellst du lediglich eine andere Ansicht ein. Also wie folgt (pseudo code).

Code:
  1. procedure render;
  2. begin
  3.   // render blah blah blah blah
  4.  
  5.   glMatrixMode(GL_PERSPECTIVE);
  6.   glPushMatrix;
  7.   glOrtho();
  8.   glMatrixMode(GL_MODELVIEW);
  9.  
  10.   render gui
  11.  
  12.   glMatrixMode(GL_PERSPECTIVE);
  13.   glPopMatrix;
  14.   glMatrixMode(GL_MODELVIEW);
  15. end;


Wichtig dabei. Mit glOrtho sorgst du üblichweise dafür, dass deine OpenGL Koordinaten sich wie 2D Koordinaten verhalten. Und du hast trotzdem noch eine Tiefe inklusive Tiefenbuffer etc. Also musst du darauf achten, dass es nicht durch andere Sachen verdeckt wird etc.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Sep 27, 2008 10:27 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Wobei ich bei der GUI eher empfehlen würde, auf Tiefenpuffer zu verzichten, also den Tiefentest auszuschalten und selber für die Sortierung zu sorgen. Weil je nach dem wieviele Schichten man in der GUI hat, ist das schwierig zu verteilen.

Außerdem, beim arbeiten mit glOrtho beachte auch, dass die Koordinaten ganz andere sind als in glPerspective. Soll heißen: Bei glPerspective arbeitest du mit Weltkoordinaten. Bei glOrtho arbeitest du (bei richtiger einstellung, also wenn du bei höhe und breite exakt die größe deines Viewports angibst) mit Pixelkoordinaten. Das ist für eine GUI meistens auch viel einfacher. Beachte zu den Koordinaten auch diesen Thread.

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 29, 2008 16:02 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
HI,

so gehts jetzt:

Code:
  1.   glMatrixMode(GL_PROJECTION);
  2.   glPushMatrix;
  3.   glLoadIdentity;
  4.   glOrtho(0,ClientForm.ClientWidth,ClientForm.ClientHeight,0,0,10);
  5.   glMatrixMode(GL_MODELVIEW);
  6.  
  7.   //fTexture.Bind;
  8.   glColor4f(1,1,1,0.2);
  9.   glBegin(GL_QUADS);
  10.     glTexCoord2f(0,0); glVertex3f(  10,  10, 0);
  11.     glTexCoord2f(0,1); glVertex3f(  10, 100, 0);
  12.     glTexCoord2f(1,1); glVertex3f( 100, 100, 0);
  13.     glTexCoord2f(1,0); glVertex3f( 100,  10, 0);
  14.   glEnd;
  15.  
  16.   glMatrixMode(GL_PROJECTION);
  17.   glPopMatrix;
  18.   glMatrixMode(GL_MODELVIEW);


aber sobald ich ne textur binde, dann wird zwar das GUI-Quad gerendert, aber der Hintergrund is schwarz. Also meine 3D-Szene wird sozusagen gelöscht/ausgeblendet. Und ich hab keine Ahnung woran das liegt...

MfG Bergmann.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 29, 2008 19:58 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Unbindest du die Textur danach wieder bzw deaktivierst du die Texturunit wieder? Sonst wird in deiner 3D-Szene (sofern du da keine Texturen benutzt) an den nicht vorhandenen Texturkoordinaten beziehungsweise der unerwartet gebundenen Textur leiden.

Unbinden:
Code:
  1. glBindTexture(GL_TEXTURE_2D, 0);


Deaktivieren (besser):
Code:
  1. glDisable(GL_TEXTURE_2D);


Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 29, 2008 21:53 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
OK, so gehts...Danke!

€: noch ein Problem, meine Selektion funzt net mehr. Hab die Quads an 2D angepasst und jetzt bekomm ich als rückgabewert dauer 0 (GUI selektiert). normalerweiße müsste ich wenn ich nix auswähl -1 haben!

Code:
  1. procedure TGameScene.RenderSelection;
  2. begin
  3.   glClearColor(0,0,1,0);
  4.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  5.  
  6.   glMatrixMode(GL_PROJECTION);
  7.   glLoadIdentity;
  8.  
  9.   glOrtho(0,ClientForm.ClientWidth,ClientForm.ClientHeight,0,0,10);
  10.  
  11.   glMatrixMode(GL_MODELVIEW);
  12.   glLoadIdentity;
  13.  
  14.   glInitNames;
  15.   glPushName(0);
  16.  
  17.   glLoadName(1);
  18.   glTranslatef(Position[0],Position[1],0);
  19.   glBegin(GL_QUADS);
  20.     glVertex3f(-fWidth/2,-fHeight/2, 0);
  21.     glVertex3f(-fWidth/2, fHeight/2, 0);
  22.     glVertex3f( fWidth/2, fHeight/2, 0);
  23.     glVertex3f( fWidth/2,-fHeight/2, 0);
  24.   glEnd;
  25. end;


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 30, 2008 13:03 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Für 2D-GUIs bietet sich das Implementieren einer eigenen Selektion über Koordinaten eher an. Die OpenGL-Selektion ist langsam und veraltet. Da du in 2D arbeitest sollte es aber kein Problem sein, die Mausposition auf die einzelnen GUI-Elemente zu übertragen und zu schauen, ob du nen treffer hast.

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 21 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 8 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.009s | 15 Queries | GZIP : On ]