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

Aktuelle Zeit: Sa Jul 05, 2025 20:25

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



Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: FBO zeigt Farben nicht
BeitragVerfasst: Di Aug 18, 2009 14:34 
Offline
DGL Member
Benutzeravatar

Registriert: Do Okt 16, 2008 13:18
Beiträge: 252
Hi,
ich habe mal wieder ein neues Problem, diesmal geht es um ein FBO. Ich habe mir das Tutorial über FBOs durchgelesen und eine Klasse (TFBO) draus gemacht. Jetzt habe ich die Klasse getestet, leider wies ich nicht genau, wann ich das FBO aktivieren muss, also rufe ich diesen Teil vor allem anderen auf, dort setze ich dann die ClearColor und rufe glClear mit GL_COLOR_BUFFER_BIT und GL_DEPTH_BUFFER_BIT und glLoadIdentity auf, jetzt kommt mein Problem wenn ich jetzt mein Viereck zeichne zeigt er manche Farben nicht, welche weis ich noch nicht. Jetzt kommt der Hammer, denn er zeichnet mir die Hintergrundfarbe falsch, wenn ich als ClearColor Weis übergebe, und im letzten glColor kein Blau habe ignoriert er den Blau Anteil der Clearcolor und zeichnet Gelb als Hintergrundfarbe.

_________________
You even trying ...

Website: http://rise-of-light.de/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 18, 2009 14:38 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Aber und jetzt kommt der Hammer, denn er zeichnet mir die Hintergrundfarbe falsch, wenn ich als ClearColor Weis übergebe, und im letzten glColor kein Blau habe ignoriert er den Blau Anteil der Clearcolor und zeichnet Gelb als Hintergrundfarbe.

Das riecht doch stark danach, dass das Format des FBO nicht mit der Textur übereinstimmt. Hast du nach dem erstellen des FBO auf Fehler geprüft? (Siehe FBO-Tutorial)

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 18, 2009 14:44 
Offline
DGL Member
Benutzeravatar

Registriert: Do Okt 16, 2008 13:18
Beiträge: 252
Ja ich habe auf Fehler überprüft. Es ist überhaupt nichts. Vieleicht hilft der Render Code:
Code:
  1. procedure TForm1.Render;
  2. begin
  3.   FBORender();
  4.  
  5.   glClearColor(0.0, 0.0, 0.0, 0.0);
  6.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  7.  
  8.   glMatrixMode(GL_PROJECTION);
  9.   glLoadIdentity;
  10.   gluPerspective(45.0, ClientWidth/ClientHeight, NearClipping, FarClipping);
  11.  
  12.   glMatrixMode(GL_MODELVIEW);
  13.   glLoadIdentity;
  14.  
  15.   glTranslatef(0, 0, -5);
  16.  
  17.   MFBO.BindTexture();
  18.  
  19.   glBegin(GL_QUADS);
  20.     glTexCoord2f(0, 0); glVertex3f(0, 0, 0);
  21.     glTexCoord2f(0, 1); glVertex3f(1, 0, 0);
  22.     glTexCoord2f(1, 1); glVertex3f(1, 1, 0);
  23.     glTexCoord2f(1, 0); glVertex3f(0, 1, 0);
  24.   glEnd;
  25.  
  26.   glBegin(GL_QUADS);
  27.     glTexCoord2f(0, 0); glVertex3f(1, 1, 0);
  28.     glTexCoord2f(0, 1); glVertex3f(2, 1, 0);
  29.     glTexCoord2f(1, 1); glVertex3f(2, 2, 0);
  30.     glTexCoord2f(1, 0); glVertex3f(1, 2, 0);
  31.   glEnd;
  32.  
  33.   SwapBuffers(DC);
  34. end;
  35.  
  36. procedure TForm1.FBORender();
  37. begin
  38.   MFBO.Enable();
  39.  
  40.   glClearColor(1.0, 1.0, 1.0, 1.0);
  41.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  42.  
  43.   glMatrixMode(GL_MODELVIEW);
  44.   glLoadIdentity();
  45.  
  46.   glTranslatef(0, 0, -1);
  47.  
  48.  
  49.   glBegin(GL_QUADS);
  50.     glColor3f(1, 0, 0); glVertex3f(0, 0, 0);
  51.     glColor3f(0, 1, 0); glVertex3f(1, 0, 0);
  52.     glColor3f(0, 0, 1); glVertex3f(1, 1, 0);
  53.     glColor3f(1, 1, 0); glVertex3f(0, 1, 0);
  54. //    glColor3f(1, 1, 1); Damit werden alle Hintergrundfarben akzeptiert
  55.   glEnd;
  56.  
  57.   MFBO.Disable();
  58. end;

_________________
You even trying ...

Website: http://rise-of-light.de/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 18, 2009 14:54 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Interessant wäre der Teil wo du den FBO erzeugst und du ihm eine Textur zuweist.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 18, 2009 14:59 
Offline
DGL Member
Benutzeravatar

Registriert: Do Okt 16, 2008 13:18
Beiträge: 252
Ok hier erzeuge ich es, FHeight bzw FWidth sind auf 512 gestellt.
Code:
  1. procedure TFBO.CreateNew();
  2. begin
  3. glGenFramebuffersEXT(1, @FFBOId);
  4. glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, FFBOId);
  5.  
  6. glGenRenderbuffersEXT(1, @FDepthId);
  7. glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, FDepthId);
  8. glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, Width, Height);
  9. glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT,GL_RENDERBUFFER_EXT, FDepthId);
  10.  
  11. glEnable(GL_TEXTURE_2D);
  12. glGenTextures(1, @FTexId);
  13. glBindTexture(GL_TEXTURE_2D, FTexID);
  14. glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_NEAREST);
  15. glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_NEAREST);
  16. glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8,  FWidth, FHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, nil);
  17. glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, FTexId, 0);
  18. CheckErrors();
  19. end;

_________________
You even trying ...

Website: http://rise-of-light.de/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 18, 2009 15:13 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Gibt es einen Unterschied zwischen Width, Height und FWidth, FHeight ? Ansonsten sehe ich da nix...

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 18, 2009 15:15 
Offline
DGL Member
Benutzeravatar

Registriert: Do Okt 16, 2008 13:18
Beiträge: 252
Coolcat hat geschrieben:
Gibt es einen Unterschied zwischen Width, Height und FWidth, FHeight ? Ansonsten sehe ich da nix...

Width und Height sind die Propertys, FWidth und FHeight die privaten Variablen.

_________________
You even trying ...

Website: http://rise-of-light.de/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 18, 2009 15:36 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Mal ein glColor4f(1.0, 1.0, 1.0, 1.0) vor dem Zeichnen deiner Quads ausprobiert? (also denjenigen, wo die FBO-Textur drauf ist)

greetings

_________________
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: Di Aug 18, 2009 15:42 
Offline
DGL Member
Benutzeravatar

Registriert: Do Okt 16, 2008 13:18
Beiträge: 252
:shock: :shock: Wie funktioniert denn das? Bzw wieso funktioniert das? Vielen Dank schonmal.

_________________
You even trying ...

Website: http://rise-of-light.de/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 18, 2009 15:51 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Naja, mit glColor färbst du deine Quads ja ein. Das hast du ja anscheinend auch in dem Code benutzt, wo du dein FBO beschrieben hast. OpenGL ist eine Statemachine (man kanns garnicht oft genug sagen), das heißt, es merkt sich eine Einstellung, bis du sie änderst. Und so lange gilt sie auch. Du hattest für die letzte Primitivie, die für dein FBO gerendert wurde, offensichtlich eine andere Farbe gesetzt, per glColor. Das hat sich OpenGL gemerkt und auch die Quads mit deiner FBO-Textur darauf entsprechend gerendert.
Man kann mit glColor nämlich auch texturierte Quads einfärben (da wird dann multipliziert). Wenn du also eine Komponente von glColor auf 0 stehen hast, wird die Farbe komplett getilgt.

greetings :)

_________________
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  [ 10 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 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.013s | 17 Queries | GZIP : On ]