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

Aktuelle Zeit: Di Jul 15, 2025 01:52

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



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: SDL und dglOpenGL
BeitragVerfasst: So Okt 09, 2005 18:16 
Offline
DGL Member

Registriert: Fr Jul 30, 2004 07:35
Beiträge: 26
Hallo,
ich bin gerade dabei, mit OpenGL eine kleine 2D - Engine zu schreiben. Über die VCL kann man bereits (Teil-)Bilder perfekt laden. Nun will ich von der Plattformunabhängigkeit profititeren und will dafür die SDL benutzen. Mein Code sieht dabei so aus:

Code:
  1.  
  2. [... Variablendefintion, etc. ...]
  3.       if SDL_Init(SDL_INIT_VIDEO) <> 0 then
  4.       begin
  5.         raise Exception.Create('Could not initialize SDL Video Mode!');
  6.     Finalize; // In der Finalize; steckt das ganze drin wie SDL_FreeSurface(FSDLSurface); SDL_Quit; Halt(0);
  7.       end;
  8.  
  9.       VideoInfo := SDL_GetVideoInfo;
  10.  
  11.       if VideoInfo = nil then
  12.       begin
  13.         raise Exception.Create('Could not collect system info. Application terminated.');
  14.         Finalize;
  15.       end;
  16.  
  17.       Flags := SDL_OPENGL or SDL_DOUBLEBUF or SDL_HWPALETTE;
  18.  
  19.       if VideoInfo.hw_available <> 0  then Flags := Flags or SDL_HWSURFACE
  20.                                       else Flags := Flags or SDL_SWSURFACE;
  21.       if VideoInfo.blit_hw <> 0  then Flags := Flags or SDL_HWACCEL;
  22.       if Fullscreen then Flags := Flags or SDL_FULLSCREEN;
  23.  
  24.       SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5);
  25.       SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 5);
  26.       SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5);
  27.       SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16);
  28.       SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
  29.  
  30.       SDL_WM_SetCaption(ApplicationTitle, ApplicationIcon);
  31.       FSDLSurface := SDL_SetVideoMode(Width, Height, ColorBits, Flags);
  32.  
  33.       if not Assigned(FSDLSurface) then
  34.       begin
  35.     raise Exception.Create('Could not initialize SDL!');
  36.         Finalize;
  37.       end;
  38.  
  39.       if not InitOpenGL then InitOpenGL;
  40.  
  41.       glEnable(GL_DEPTH_TEST);
  42.       glDepthFunc(GL_ALWAYS);
  43.       glEnable(GL_TEXTURE_2D);
  44.       glEnable(GL_CULL_FACE);
  45.       glCullFace(GL_BACK);
  46.       glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
  47.  
  48.       while not Done do
  49.       begin
  50.  
  51.       glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  52.       glMatrixMode(GL_PROJECTION);
  53.       glLoadIdentity;
  54.       glViewport(0, 0, FWidth, FHeight);
  55.       glOrtho(0, FWidth, FHeight, 0,  0, 128);
  56.  
  57.       glMatrixMode(GL_MODELVIEW);
  58.       glLoadIdentity;
  59.  
  60.       glTranslatef(0, 0, 0);
  61.  
  62.       glColor3f(0.2, 0.2, 0.6);
  63.  
  64.      
  65.       glcolor3f(0,1,0);  
  66.       glBegin( GL_QUADS );
  67.        glVertex3f( -1.0, 1.0, 0.0 );
  68.        glVertex3f( 1.0, 1.0, 0.0 );
  69.        glVertex3f( 1.0, -1.0, 0.0 );
  70.        glVertex3f( -1.0, -1.0, 0.0 );
  71.       glEnd;
  72.  
  73.       SDL_GL_SwapBuffers;
  74.       end;
  75.  


Das Ergebnis: Ein SDL-Fenster mit dunkelblauer Hintergrundfarbe aus glColor3f(0.2, 0.2, 0.6); Von einem Quad aber keine Spur. Ich glaube, ich stehe auf dem Schlauch. Ich habe bisher das Quad nicht anzeigen können. Ich finde einfach den Fehler nicht. Könnt ihr mir helfen?

_________________
[http://www.freeze-dev.de]


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Okt 09, 2005 18:20 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Kannst du mal sagen wie dein FWidth/Width und FHeight/Height definiert sind. Eventuell ist dein Bildausschnitt so klein, dass das Quad den gesamten Bildschirm füllt. Die Hintergrundfarbe sollte bei dir nämlcih immer noch schwarz sein.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Okt 09, 2005 18:26 
Offline
DGL Member

Registriert: Fr Jul 30, 2004 07:35
Beiträge: 26
FWidth/Width ist 640 und FHeight/Height ist 480.
Der Hintergrund ist aber eindeutig dunkelblau.

Edit: Hängt mein Problem vielleicht damit zusammen, dass ich die aktuelle SDL-DLL (1.2.9) benutze, die sdl.pas aber noch nicht für die neue SDL-DLL angepasst ist?

_________________
[http://www.freeze-dev.de]


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Okt 09, 2005 18:35 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Das du den einen Pixel nicht siehst kann ich verstehen ;)
Aber weshalb der Hintergrund dunkelblau ist, ist mir ein Rätsel.
Du solltest jedenfalls erstmal das ändern:
Code:
  1.       glBegin( GL_QUADS );
  2.        glVertex3f( 0.0, 200.0, 0.0 );
  3.        glVertex3f( 200.0, 200, 0.0 );
  4.        glVertex3f( 200.0, 0.0, 0.0 );
  5.        glVertex3f( 0.0, 0.0, 0.0 );
  6.       glEnd;

Mit deinem Code hast du nur untenlinks einen Pixel gezeichnet, die anderen 3 sind ausserhalb des Fensters :roll:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Okt 09, 2005 18:42 
Offline
DGL Member

Registriert: Fr Jul 30, 2004 07:35
Beiträge: 26
Das Problem hat sich mittlerweile erledigt. Ich hatte im Quelltext folgendes vergessen:
Code:
  1.  
  2. FHeight := Height;
  3. FWidth := Width;
  4.  

:oops:
Nun funktionniert es einwandfrei. Dunkelblauer Hintergrund, darüber ein Quad :D
Vielen Dank an alle, die versucht haben zu helfen und mitgedacht haben.

_________________
[http://www.freeze-dev.de]


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 10, 2005 09:21 
Offline
DGL Member

Registriert: Fr Jul 30, 2004 07:35
Beiträge: 26
Hi,
ich hab noch eine Frage.
Ich biete den Programmierer in meiner Engine die Möglichkeit, ob er über VCL oder über die SDL programmieren will. Aber wenn über die VCL programmiert wird, wird zum Starten der kompilierten Anwendung trotzdem die SDL.DLL benötigt, obwohl SDL überhaupt nicht initialisiert wurde.
Habt ihr vielleicht eine Idee, wie ich das lösen könnte?

_________________
[http://www.freeze-dev.de]


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 10, 2005 10:14 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3830
Wohnort: Tespe (nahe Hamburg)
Ich würde vor jeder weiteren Überlegung mir die Frage stellen, ob es sinnvoll ist in diesem Bereich zweispurig zu fahren. Der Kontaktbereich mit dem darunterliegenden Bereich ist sehr gering, so dass ich die VCL hochkant rausschmeißen würde. Sollte SDL oder Code der VCL in der Engine vorhanen sein, liegt bereits ein konzeptioneller Fehler vor und einige Schnittstellen sollten abstrahiert werden. So das man nur z.B. ein Tastatursignal bekommt. Worüber dieses herbezogen wird, wäre irrelevant. Auf diese Weise arbeitet die Engine transparent und benötigt eigentlich keine zwei Gleise. Sollte man dies dennoch anstreben, würde ich schlichtweg ein zweites Projekt machen in dem die SDL-Libs nicht gelinkt werden. In dem moment, wo Du jedoch mehr als die Initalisierung und Eventmanagement umschreiben müßtest, solltest Du in jedem Fall die Struktur verändern.

_________________
"Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."


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


Wer ist online?

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