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

Aktuelle Zeit: Mo Jul 14, 2025 21:17

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



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: oGL rendert nicht (nicht alles)
BeitragVerfasst: Mi Sep 24, 2003 23:23 
Offline
DGL Member

Registriert: Sa Aug 30, 2003 22:23
Beiträge: 36
Wohnort: Hamburg
Hi
mein problem is bestimmt wieder was ganz simples, aber ich komm da einfach nicht weiter..

in meiner szene render ich bis jetzt nur nen Dreieck und danach lass ich per BitmapFont die Frames einblenden..
Jedenfalls sollte das so sein, denn im moment bekomm ich nur die Frames eingeblendet und das dreieck fehlt..

Ich poste hier mal nen paar code teile.. vieleicht kann mir ja jemand helfen. :)

OnCreate:
Code:
  1.  
  2. procedure TglForm.FormCreate(Sender: TObject);
  3. var
  4.     myPalette : HPALETTE;
  5. begin
  6.  ChangeDisplay;
  7.  if not InitOpenGL then
  8.     raise Exception.Create('Fehler beim Initialisieren von OpenGL!');
  9.  
  10.   myDC := GetDC(Handle);
  11.   myRC:= CreateRenderingContext(myDC, [opDoubleBuffered] ,32, 0, 0, 0, 0, myPalette);
  12.  
  13.   ActivateRenderingContext(myDC, myRC);
  14.  
  15.   SetupOpenGL(ClientWidth,ClientHeight);
  16.  
  17.   gl2DText.BuildFont;
  18. end;
  19.  

Die ChangeDisplay; wechselt nur die auflösung...

SetupOpenGL:
Code:
  1.  
  2. Procedure SetupOpenGL(glFormClientWidth,glFormClientHeight : integer);
  3. begin
  4.  
  5.    glClearColor(0.0, 0.0, 0.0, 0.0); //Hintergrundfarbe
  6.  
  7.    glViewport(0, 0, glFormClientWidth, glFormClientHeight);
  8.    glMatrixMode(GL_PROJECTION);
  9.    glLoadIdentity;
  10.    glOrtho(0, 800, 600, 0, -1, 1);
  11.    glMatrixMode(GL_MODELVIEW);
  12.    glLoadIdentity;
  13.    glClearColor(0,0,0,0);
  14.  
  15.  
  16.    glEnable(GL_TEXTURE_2D);
  17.    glEnable(GL_DEPTH_TEST);
  18. end;
  19.  


OnResize:
Code:
  1.  
  2. Procedure ResizeWindow(glFormClientWidth,glFormClientHeight : integer);
  3. begin
  4.    glViewport(0, 0, glFormClientWidth, glFormClientHeight);
  5.    glMatrixMode(GL_PROJECTION);
  6.    glLoadIdentity;
  7.    glOrtho(0, 800, 600, 0, -1, 1);
  8.    glMatrixMode(GL_MODELVIEW);
  9.    glLoadIdentity;
  10.    glClearColor(0,0,0,0);
  11. end;
  12.  


OnIdle:
Code:
  1.  
  2. procedure TglForm.ApplicationEvents1Idle(Sender: TObject;
  3.   var Done: Boolean);
  4. begin
  5.  
  6.    glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  7.    glLoadIdentity;
  8.  
  9.    glBegin(GL_TRIANGLES);
  10.     glColor3f(1,0,0);
  11.     glVertex2f(-1.0,-1.0);
  12.     glColor3f(0,1,0);
  13.     glVertex2f( 0.0, 1.0);
  14.     glColor3f(0,0,1);
  15.     glVertex2f( 1.0,-1.0);
  16.     glEnd();
  17.  
  18.  
  19. // Frames anzeigen
  20.    glColor3f(1,0,0);
  21.    gl2DText.PrintText(IntToStr(FPS)+' FPS',20,16);
  22.  
  23.  SwapBuffers(myDC);
  24.  
  25. Inc(FrameCount);
  26. Done := False;
  27. end;
  28.  


Die schrift wird richtig ausgegeben aber das dreieck fehlt komplett.

Bin für vorschläge aller art dankbar!

mfg
Avenger

_________________
<< Ich werde Ewig leben oder beim Versuch dies zu erreichen, sterben! >>


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 25, 2003 10:56 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Dein Dreieck WIRD gezeichnet, allerdings ists aufgrund deiner Ortho-Ansicht nur wenige Pixel groß.Du schaltest ja vor dem Zeichnen des Dreiecks in eine 800x600er orthagonale Projektion, und zeichnest dann ein nur 2x2 großes Dreicke, welches dann entweder gar nicht, oder nur schwer erkennbar ist.
Damit das so klappt wie du willst, musst du einmal in die Parallelprojektion schalten und dort den Text zeichnen, und einmal in die normale 3D-Projektion um z.B. dein Dreick zu zeichnen.
Die optimalste Lösung dafür wäre folgende :
Code:
  1. glMatrixMode(GL_PROJECTION);
  2. glLoadIdentity;
  3. gluPerspective(...);
  4. glMatrixMode(GL_MODELVIEW);
  5. glLoadIdentity;
  6. // 3D-Sachen zeichnen
  7. ...
  8. glMatrixMode(GL_PROJECTION);
  9. glLoadIdentity;
  10. glOrtho(...);
  11. glMatrixMode(GL_MODELVIEW);
  12. glLoadIdentity;
  13. // 2D-Sachen zeichnen

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 25, 2003 13:09 
Offline
DGL Member

Registriert: Sa Aug 30, 2003 22:23
Beiträge: 36
Wohnort: Hamburg
der ortho modus ist schon richtig..
ich wusste nur nicht das ich dabei nen anderes coordinatensystem habe.. was ich mir aber eigentlich hätte denken können.. :-)
das Dreieck war nicht nur sehr klein.. sondern auch noch ausserhalb des bildschirmes, da im ortho kein negativer bereich sichtbar ist..

Ein GROßES Dankeschön für deine hilfe..

_________________
<< Ich werde Ewig leben oder beim Versuch dies zu erreichen, sterben! >>


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Sep 26, 2003 17:06 
Offline
DGL Member

Registriert: Sa Aug 30, 2003 22:23
Beiträge: 36
Wohnort: Hamburg
Also irgendwie komm ich mit dem ganzen noch nicht so klar :?

Das oben beschriebene programm hab ich jetzt ein stückchen erweitert und hab schon wieder probleme..
ich lade mit glBMP eine textur und packe die auf nen quad. Die Textur wird auch angezeigt allerdings mit roter farbe und meine schrift wird nicht mehr angezeigt. Die rote farbe wird von dem glColor was nach dem zeichnen des Quads geändert wird genommen.

Lass ich die Procedur mit dem laden der textur weg, dann wird alles ganz normal angezeigt.

Könnte das was damit zu tun haben, das ich die Lade und Zeichne Proceduren in einer seperaten unit hab?

Oder hat das was mit dem RenderingContext zu tun? bzw Wann verliere ich den Context und wann sollte ich ihn deaktivieren und aktivieren?
Momentan aktiviere ich den RenderingContext in der onCreate und deaktiviere ihn in der OnDestroy.

währe für hinweise und tipps dankbar.

_________________
<< Ich werde Ewig leben oder beim Versuch dies zu erreichen, sterben! >>


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Sep 26, 2003 17:18 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Okt 26, 2002 17:14
Beiträge: 188
Wohnort: Hannover/Lüneburg
Setzt du die Farbe auch wieder zurück?
Wenn Du sie mit glColor auf rot setzt, bleibt das bis zum zerstören des Rendering-Context so. Erst ein erneutes glColor mit weiß etwa setzt das wieder zurück.

_________________
Thunderman
Bei schwierigen Problemen entscheiden wir uns einfach für die richtige Lösung. Klar?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Sep 26, 2003 17:29 
Offline
DGL Member

Registriert: Sa Aug 30, 2003 22:23
Beiträge: 36
Wohnort: Hamburg
wird das nicht mit glClear(GL_COLOR_BUFFER_BIT) wieder zurückgesetzt?

Hat aber auch nicht geholfen.. im moment seh ich gar keine Textur und über meine schrift, die ich aus den anderen units einbinde ist nen balken in der schriftfarbe und die schrift direkt aus der onIdle anweisung ist gar nicht da..

ich hab den source mal hochgeladen, vieleicht mag sich den ja mal jemand angucken..

http://www.team-illu23.de/AvengerPrivat/gamex.zip


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Sep 26, 2003 21:32 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Okt 26, 2002 17:14
Beiträge: 188
Wohnort: Hannover/Lüneburg
Nein, wird es nicht. glClear(GL_COLOR_BUFFER_BIT) löscht nur den Inhalt des Framebuffers, der dann zur Ausgabe verwendet wird. Also alles was Du bisher gezeichnet hast, nicht aber die Einstellungen. Genauer gesagt löscht dieser aufruf nur die Farbwerte im Framebuffer. Die Tiefenwerte und ein eventueller Stencilbuffer müssten noch mit or angefügt werden oder extra gelöscht werden (was mehr Zeit in Anspruch nehmen würde).

_________________
Thunderman
Bei schwierigen Problemen entscheiden wir uns einfach für die richtige Lösung. Klar?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Sep 26, 2003 21:44 
Offline
DGL Member

Registriert: Sa Aug 30, 2003 22:23
Beiträge: 36
Wohnort: Hamburg
thx.. hab das jetzt mit den texturen hinbekommen.. das mit glClear war aber auch ganz grober logikfehler meinerseits.. denn selbs wenns so wäre dann hätts mir auch nichts gebracht..

_________________
<< Ich werde Ewig leben oder beim Versuch dies zu erreichen, sterben! >>


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


Wer ist online?

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