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

Aktuelle Zeit: Di Mai 14, 2024 04:30

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



Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Do Sep 12, 2013 22:23 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 12, 2013 07:45
Beiträge: 61
Programmiersprache: Turbo Delphi 2006
Hallo,

ich habe einen Anfang für ein kleines Spiel mit SDL und openGL geschrieben. Die openGL Sachen funktionieren im Gundsatz. Aber wie bekommt man jetzt eine GUI hin?
Ein Quad genau vor die Linse und eine GUI-Textur mit einem transparenten Bereich zum durchschauen draufgeklebt? Oder gibt es bessere Varianten.
Ich habe auch schon überlegt die VCL zu nutzen und openGL auf einem Panel auszugeben aber einfach nur den Form.Handle gegen den Panel.Handle zu tauschen hat auf die Schnelle nicht geklappt.

Hat jemand einen Vorschlag?


Zuletzt geändert von Twist am Di Sep 17, 2013 06:30, insgesamt 2-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: GUI mit SDL ?
BeitragVerfasst: Sa Sep 14, 2013 12:51 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 14, 2013 21:17
Beiträge: 588
Programmiersprache: C++
Die GUI-Komponenten selbst zu programmieren ist eine nervige Aufgabe. Wenn du sowas machst, nutze auf jeden Fall OOP (also insbesondere Vererbung) - das spart eine Menge Arbeit. Insbesondere die Ein- und Ausgabe von Texten ist eine unschöne Aufgabe. Da du ja Delphi benutzt, könnte dir die TextSuite von Lossy ex weiterhelfen. Die GUI solltest du dann der Einfachheit halber im 2D-Modus rendern, also mit glOrtho.

VCL sollte aber eigentlich ebenfalls funktionieren (auch, wenn es hässlich ist). Ich benutze die VCL-Komponenten in meinen Editoren und rendere den 3D-Kram in ein Panel. Du darfst allerdings keine Komponenten auf dem Panel platzieren, denn die werden beim Rendern übergezeichnet.

PS: Willkommen im DGL-Forum! :)

_________________
So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: GUI mit SDL ?
BeitragVerfasst: Sa Sep 14, 2013 13:03 
Offline
Compliance Officer
Benutzeravatar

Registriert: So Aug 08, 2010 08:37
Beiträge: 460
Programmiersprache: C / C++ / Lua
Du solltest nicht für das Hauptprogramm die VCL nehmen und gleichzeitig SDL verwenden, das wäre unproduktiv. SDL und VCL decken im Prinzip dieselben Bereiche ab (Window/Eventhandling)...

_________________
offizieller DGL Compliance Beauftragter
Never run a changing system! (oder so)


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Sep 16, 2013 06:53 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 12, 2013 07:45
Beiträge: 61
Programmiersprache: Turbo Delphi 2006
Danke für die Antworten.
Zitat:
Die GUI-Komponenten selbst zu programmieren ist eine nervige Aufgabe.
Das dachte ich mir schon und da ich fast 10 Jahre nichts mehr mit Delphi gemacht habe, bin ich auch wieder Anfänger. Also nichts für mich.
Zitat:
aber einfach nur den Form.Handle gegen den Panel.Handle zu tauschen hat auf die Schnelle nicht geklappt.
Das Prob hat sich auch erledigt. Bei glViewPort und gluPerspective muß man auch die Panelwerte anwenden.

Ich habe mit der SDL Texturen laden können. Wenn ich es jetzt mit glBitmap.pas oder Textures.pas versuche sehe ich keine Texturen: Wo liegt mein Fehler?
99% des Code ist das OpenGL1.5 - VCL Template aus dem Downloadbereich, ich wollte damit den Texturloader testen.

Code:
  1. procedure TextureLoad;
  2. begin
  3.   LoadTexture('wall.tga', textureW, false);
  4.   glGenTextures(1, @textureW);
  5.   glBindTexture(GL_TEXTURE_2D, textureW);
  6.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  7.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  8.  end;
  9.  
  10. procedure glDrawScene;
  11. begin
  12.   glLoadIdentity;
  13.   glBindTexture(GL_TEXTURE_2D,textureW);
  14.   // Zeichne ein Quadrat
  15.   //glcolor3f(0,1,0);
  16.   glBegin( GL_QUADS );
  17.     glTexCoord2f(0,1);glVertex3f( -1.0, 1.0, 0.0 );
  18.     glTexCoord2f(1,1);glVertex3f( 1.0, 1.0, 0.0 );
  19.     glTexCoord2f(1,0);glVertex3f( 1.0, -1.0, 0.0 );
  20.     glTexCoord2f(0,0);glVertex3f( -1.0, -1.0, 0.0 );
  21.   glEnd;
  22. end;
  23.  
  24.  
  25. procedure TGLForm.FormCreate(Sender: TObject);
  26. begin
  27. InitOpenGL;
  28. DC := GetDC(panel1.Handle);
  29. RC := CreateRenderingContext(DC, [opDoubleBuffered], 32, 24, 0, 0, 0, 0);
  30. ActivateRenderingContext(DC, RC);
  31. glEnable(GL_DEPTH_TEST);
  32. glDepthFunc(GL_LESS);
  33. glClearColor(0,0,0,0);
  34. Application.OnIdle := ApplicationEventsIdle;
  35. StartTick := GetTickCount;
  36. glEnable(GL_TEXTURE_2D);
  37. TextureLoad;
  38. end;
  39.  
  40. procedure TGLForm.ApplicationEventsIdle(Sender: TObject; var Done: Boolean);
  41. begin
  42. glMatrixMode(GL_PROJECTION);
  43. glLoadIdentity;
  44. glViewPort(0, 0, Panel1.Width, Panel1.Height);
  45. gluPerspective(60, Panel1.Width/Panel1.Height, 1, 128);
  46. glMatrixMode(GL_MODELVIEW);
  47. glLoadIdentity;
  48. glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  49. GLForm.Caption:= floatToStr(FPS);
  50. glDrawScene;
  51. SwapBuffers(DC);
  52. Done := False;
  53. end;



Und was muß man bei glBitmap konfigurieren?

Danke Twist


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: GUI mit SDL ? & Texturloader
BeitragVerfasst: Mo Sep 16, 2013 09:53 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 14, 2013 21:17
Beiträge: 588
Programmiersprache: C++
Von glBitmap habe ich keine Ahnung. Aber dass du nichts siehst, könnte an der z-Koordinate liegen. Mit gluPerspective stellst du einen Tiefenbereich von 1 bis 128 ein, bei glVertex3f übergibst du aber 0 als z-Koordinate.

_________________
So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: GUI mit SDL ? & Texturloader
BeitragVerfasst: Mo Sep 16, 2013 10:55 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 12, 2013 07:45
Beiträge: 61
Programmiersprache: Turbo Delphi 2006
Das Quad sehe ich aber untexturiert.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: GUI mit SDL ? & Texturloader
BeitragVerfasst: Mo Sep 16, 2013 15:31 
Offline
Compliance Officer
Benutzeravatar

Registriert: So Aug 08, 2010 08:37
Beiträge: 460
Programmiersprache: C / C++ / Lua
Code:
  1.  
  2.   LoadTexture('wall.tga', textureW, false);
  3.   glGenTextures(1, @textureW);
  4.   glBindTexture(GL_TEXTURE_2D, textureW);
  5.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  6.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  7.  


Du lädst erst die Texture und rufts dann nochmal GenTextures, etc. auf?
Kommentier mal alles außer LoadTexture aus.

_________________
offizieller DGL Compliance Beauftragter
Never run a changing system! (oder so)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: GUI mit SDL ? & Texturloader
BeitragVerfasst: Mo Sep 16, 2013 16:04 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 14, 2013 21:17
Beiträge: 588
Programmiersprache: C++
Twist hat geschrieben:
Das Quad sehe ich aber untexturiert.
Das wundert mich jetzt. Du rufst doch glLoadIdentity auf und danach lässt du die Matrix in Ruhe... :?

Noch eine Idee zur Fehlerbehebung: Die Funktion LoadTexture hat doch bestimmt einen Rückgabewert. Falls die Datei z.B. nicht existiert, sollte sie einen entsprechenden Fehlercode (oder wenigstens ein false) zurückgeben. Es sollte sich lohnen, das zu checken.
Edit: Natürlich erstmal beheben, was end aufgefallen ist.

_________________
So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)


Zuletzt geändert von glAwesome am Mo Sep 16, 2013 17:01, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: GUI mit SDL ? & Texturloader
BeitragVerfasst: Mo Sep 16, 2013 16:57 
Offline
Compliance Officer
Benutzeravatar

Registriert: So Aug 08, 2010 08:37
Beiträge: 460
Programmiersprache: C / C++ / Lua
Nochmal kurz zur Erklärung:

glGenBuffers überschreibt deine in LoadTexture gesetzte ID nochmal mit der ID eines leeren Buffers/Texture.

EDIT:
Das weiße Quad ist ein Anzeichen dafür, dass keine Textur gebunden/geladen wurde.

_________________
offizieller DGL Compliance Beauftragter
Never run a changing system! (oder so)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: GUI mit SDL ? & Texturloader
BeitragVerfasst: Di Sep 17, 2013 06:30 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 12, 2013 07:45
Beiträge: 61
Programmiersprache: Turbo Delphi 2006
Zitat:
Du lädst erst die Texture und rufts dann nochmal GenTextures, etc. auf?

Das war's Danke. Man sollte doch nicht alles unverstanden aus irgendwelchen Templates oder Tutorials übernehmen.


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


Wer ist online?

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.

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