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

Aktuelle Zeit: Fr Jul 18, 2025 08:18

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 25 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Depth Buffer in FBO
BeitragVerfasst: Mi Okt 19, 2011 08:50 
Offline
DGL Member

Registriert: Di Aug 09, 2011 07:33
Beiträge: 163
Programmiersprache: C/C++
Hey,

Ich würde gerne den Depth Buffer in mein FBO packen aber leider klappt das noch nicht so ganz.

Für das FBO nutze ich erstmal folgenden Code:
Code:
  1.     //FBO
  2.     glGenFramebuffersEXT(1, &fbo);
  3.     glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);
  4.     glGenRenderbuffersEXT(1, &depth);
  5.     glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, depth);
  6.     glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, Size, Size);
  7.     glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, depth);
  8.     glGenTextures(1, &TextureSave);
  9.     glBindTexture(GL_TEXTURE_2D, TextureSave);
  10.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
  11.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
  12.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
  13.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
  14.     glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, Size, Size, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
  15.     glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, TextureSave, 0);



Um das FBO zu füllen lasse ich halt die Scene rendern:
Code:
  1.     glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);
  2.         glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  3.         glPushAttrib(GL_VIEWPORT_BIT);
  4.             glViewport(0, 0, ShadowMapSize, ShadowMapSize);
  5.             RenderScene();
  6.         glPopAttrib();
  7.     glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);


Ich habe dann einfach mal ein Quad gemacht und auf dem Quad die Texture gemappt die im FBO ist. Das ist nur leider keine Depth Texture sondern genau das was ich auf dem Bildschirm sehe, also mit Farben und so :roll:
Beim glTexImage2D habe ich schon probiert die RGBA Sachen auf GL_DEPTH_COMPONENT zu stellen aber alles ohne Erfolg. Hoffe mir kann jemand sagen wie das geht!

MfG :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Depth Buffer in FBO
BeitragVerfasst: Mi Okt 19, 2011 09:49 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 30, 2007 18:35
Beiträge: 331
Hi,

so in etwa mache ich es:

Code:
  1.  
  2. glGenTextures(1, &textureID);
  3. glBindTexture(GL_TEXTURE_2D, textureID);
  4.  
  5. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  6. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  7.  
  8. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
  9. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
  10.  
  11. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_R_TO_TEXTURE);
  12. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL);
  13. glTexParameteri(GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE, GL_INTENSITY);
  14.  
  15. glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT32, width, height, 0, GL_DEPTH_COMPONENT, GL_FLOAT, 0);
  16. glBindTexture(GL_TEXTURE_2D, 0);
  17.  
  18. glGenFramebuffersEXT(1, &fbo);
  19. glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);
  20. glReadBuffer(GL_NONE);
  21. glDrawBuffer(GL_NONE);
  22. glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_TEXTURE_2D, textureID, 0);
  23. status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
  24.  


Edit: Danke für die Berichtigung, Schläfer!


Zuletzt geändert von Markus am Fr Okt 21, 2011 10:57, insgesamt 2-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Depth Buffer in FBO
BeitragVerfasst: Mi Okt 19, 2011 11:37 
Offline
DGL Member

Registriert: Di Aug 09, 2011 07:33
Beiträge: 163
Programmiersprache: C/C++
ich habs so gemacht wie du aber wenn ich die Textur dann auf ein Objekt packe ist die komplett grau :?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Depth Buffer in FBO
BeitragVerfasst: Mi Okt 19, 2011 15:09 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 30, 2007 18:35
Beiträge: 331
Ich bin mir gerade nicht sicher, aber vielleicht bringt es etwas, mit diesen Werten rumzuspielen:

Code:
  1. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_R_TO_TEXTURE);
  2. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL);
  3. glTexParameteri(GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE, GL_INTENSITY);


Vielleicht reicht es schon, die erste Zeile zu entfernen...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Depth Buffer in FBO
BeitragVerfasst: Mi Okt 19, 2011 15:24 
Offline
DGL Member

Registriert: Di Aug 09, 2011 07:33
Beiträge: 163
Programmiersprache: C/C++
Hm nee, will einfach nicht funktionieren :(

Edit//
So sieht das Aktuell aus:
Bild

(Ich splitte bei mir das Bild in 4 FBO's auf - daher 4 Teile - aber das sollte ja nicht so relevant sein für den Fall)


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Depth Buffer in FBO
BeitragVerfasst: Do Okt 20, 2011 12:20 
Offline
DGL Member

Registriert: Mi Jan 05, 2011 14:55
Beiträge: 47
Programmiersprache: Delphi, C++,C
Also ich verstehe es jetzt so, dass du dir die werte des tiefenpuffers farblich anzeigen willst. Dafür müssen diese werte erstmal. In farbe umgewandelt werden. Oder verstehe ich dich jetzt falsch?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Depth Buffer in FBO
BeitragVerfasst: Do Okt 20, 2011 15:39 
Offline
DGL Member

Registriert: Di Aug 09, 2011 07:33
Beiträge: 163
Programmiersprache: C/C++
Nicht so ganz!

Ich habe eine Scene die ich rendern will, und die Tiefenwerte davon sollen in ein FBO gespeichert werden! Also eine Depth-Texture.
Eigentlich müsste dann sowas in der Art im FBO sein:
Bild

Ich weiss nur leider nicht genau wie ich das mit dem FBO anstelle :?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Depth Buffer in FBO
BeitragVerfasst: Do Okt 20, 2011 17:45 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Versuch mal GL_DEPTH_COMPONENT16 anstatt GL_DEPTH_COMPONENT. Damit klappts zumindest bei mir.

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: Re: Depth Buffer in FBO
BeitragVerfasst: Do Okt 20, 2011 18:37 
Offline
DGL Member

Registriert: Di Aug 09, 2011 07:33
Beiträge: 163
Programmiersprache: C/C++
Hatte ich auch schon probiert aber ohne Erfolg :?
Werde einfach nochmal bisschen rumprobieren und vielleicht bekomme ich es noch hin.

Was mir gerade auch noch weiterhelfen würde:
Können z.B. 4 Texturen zu einer zusammengefasst werden?
Also man hat 4x 256x256 und diese werden in eine 512x512 reingepackt?


Edit//
Also ich habe nochmal etwas probiert und have davon mal einBild gemacht. Für mich sieht das so aus, als hätte es schon was mit der Depth Sache zutun aber es geht halt irgendwie nicht in die Textur aber seht selbst: :?

Edit2// Hab nochmal die ColorMask deaktiviert und das sieht wirklich "depth" aus :roll: Nur komischerweise ist nix in der Textur? Zumindest seh ich nix, denn wenn ich die Textur auf ein Quad Mappe ist die Textur komplett schwarz!


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Depth Buffer in FBO
BeitragVerfasst: Fr Okt 21, 2011 05:07 
Offline
DGL Member

Registriert: Fr Okt 03, 2008 13:32
Beiträge: 367
In dem Beispiel-Code von Markus ist in der Zeile 22 einkleiner Fehler drin. Der 2. und der 3. Parameter sind vertauscht. So müsste es richtig sein:
Code:
  1. glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_TEXTURE_2D, textureID, 0);


Meine Texturen für die FBOs erstelle ich immer so:
Code:
  1. glGenTextures(1, @TexID);
  2. glBindTexture(GL_TEXTURE_2D, TexID);
  3. glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, 0, 0, aWidth, aHeight, 0);

Was die ganzen Einstellungen, die man mit glTexParameter vornehmen kann, machen, weiß ich zwar nicht so richtig, aber mir scheint das man mit GL_COMPARE_R_TO_TEXTURE immer nur schwarz oder weiß als Farbe bekommen kann.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Depth Buffer in FBO
BeitragVerfasst: Fr Okt 21, 2011 08:59 
Offline
DGL Member

Registriert: Di Aug 09, 2011 07:33
Beiträge: 163
Programmiersprache: C/C++
glCopyTexImage2D funktioniert bei mir gut, nur leider kann ich dann keine Textur größer als mein Window nehmen.
Werde nochmal paar Sachen mit dem Depthbuffer probieren, irgendwie muss das ja gehen :?

Aber nochmal zu einer Frage die ich vorher schon gestellt habe: Kann man aus mehreren kleineren Texturen auch eine große erstellen? Also das ich aus 4 256x256 eine 512x512 mache?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Depth Buffer in FBO
BeitragVerfasst: Fr Okt 21, 2011 09:13 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
warum nutztn kein GL_DEPTH_ATTACHMENT????? oder überseh ich das grad

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Depth Buffer in FBO
BeitragVerfasst: Fr Okt 21, 2011 10:50 
Offline
DGL Member

Registriert: Di Aug 09, 2011 07:33
Beiträge: 163
Programmiersprache: C/C++
Im Code oben hatte ich das nicht genutzt...
Habs aber natürlich auch mal probiert aber ohne Ergebnis.

Das komische ist halt, dass ich den Depth-Buffer definitiv rendere aber er landet nicht in der Textur, obwohl ich bein FBO schon viele Dinge probiert aber es klappt halt nie!
Hab mich aber auch gefragt: Kann man den Depth Buffer so einfach auf einem Quad Rendern?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Depth Buffer in FBO
BeitragVerfasst: Fr Okt 21, 2011 10:55 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
eigentlich schon , sieht halt bloß immer nen bissl seltsam aus.... liefert denn glreadHolzhammerpixel etwas????

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Depth Buffer in FBO
BeitragVerfasst: Fr Okt 21, 2011 12:51 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
AMD: Ah… Ich glaube ich verstehe. In welcher Textur schaust du denn? In deinem Code nämlich wird der Tiefenwert in einen Renderbuffer geschrieben, nicht in deine Textur.

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  [ 25 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

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