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

Aktuelle Zeit: Fr Jul 18, 2025 11:16

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



Ein neues Thema erstellen Auf das Thema antworten  [ 25 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags: Re: Depth Buffer in FBO
BeitragVerfasst: Fr Okt 21, 2011 13:10 
Offline
DGL Member

Registriert: Di Aug 09, 2011 07:33
Beiträge: 163
Programmiersprache: C/C++
Also laut dem Code oben habe ich es mit "TextureSave" probiert aber auch schonmal "depth" genommen aber dort ist immer irgendeine Textur, welche die Objekte haben?! o.O


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

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Also depth ist definitiv keine Textur. Wahrscheinlich wird der OpenGL-Name (also der Integer in depth) aber von einer anderen Textur bereits verwendet. Und TextureSave enthält nur Farbinformationen. Wenn du die Tiefentextur willst, musst du die separat erstellen und über genauso wie die Farbtextur an den Framebuffer binden, nur, dass du nicht GL_COLOR_ATTACHMENT0 nimmst sondern GL_DEPTH_ATTACHMENT. Der Renderbuffer entfällt dann.

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: Fr Okt 21, 2011 14:25 
Offline
DGL Member

Registriert: Di Aug 09, 2011 07:33
Beiträge: 163
Programmiersprache: C/C++
Okay, hab ich probiert:
Code:
  1.     glGenTextures(1, &Texture);
  2.     glBindTexture(GL_TEXTURE_2D, Texture);
  3.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
  4.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
  5.     glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP );
  6.     glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP );
  7. //  glTexParameteri(GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE, GL_INTENSITY);
  8. //  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_R_TO_TEXTURE);
  9. //  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL);
  10.     glTexImage2D( GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, Size, Size, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, 0);
  11.     glBindTexture(GL_TEXTURE_2D, 0);
  12.     glGenFramebuffersEXT(1, &fbo);
  13.     glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);
  14. //  glDrawBuffer(GL_NONE);
  15. //  glReadBuffer(GL_NONE);
  16.     glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT,GL_TEXTURE_2D, Texture, 0);
  17.     glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
  18.  


Die Dinge die auskommentiert sind habe ich mal optional versucht => Ohne Ergebnis.
Wenn ich die 3 glTexParameteri an hab ist die komplette Textur die ich aufs Quad mappe weiss, deaktiviere ich die 3 ist die Textur schwarz.

Um den Depth-Buffer in die Texturmachen habe ich folgenden Code genommen (auskommentiere Sachen wieder optional getestet):
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, Size, Size);
  5.         //  glColorMask(0, 0, 0, 0);
  6.             glCallList(_displayListId);
  7.         //  glColorMask(1, 1, 1, 1);
  8.         glPopAttrib();
  9.     glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);


Echt zum verrückt werden, dass das nicht klappt :?


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

Registriert: Fr Okt 03, 2008 13:32
Beiträge: 367
Versuch' mal die Kamera sehr nah an ein Objekt ranzubewegen. Die Tiefenwerte sind nicht linear zu der Entfernung im Worldspace. Je nachdem wie die Near- und Farclippingplane ist, kann es sein, dass viele der Objekte einen Wert von >0.9 haben und (fast) weiß sind, wenn du die Tiefentextur darstellst. z.B. ist bei Near=0.01 und Far=1000 schon nach 1-2 units Entfernung von der Kamera alles weiß.


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

Registriert: Di Aug 09, 2011 07:33
Beiträge: 163
Programmiersprache: C/C++
Ich habs bei mir mit near = 1.0 und far = 150.0 probiert oder soll ich es mal noch näher probieren?


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

Registriert: Fr Okt 03, 2008 13:32
Beiträge: 367
Ich hab' jetzt mal selbst etwas probiert bis es funktioniert hat und mein Code sieht so aus:
Code:
  1. glGenTextures(1, @depth);
  2. glBindTexture(GL_TEXTURE_2D, depth);
  3. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
  4. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
  5. glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP );
  6. glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP );
  7. glTexImage2D( GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, Size, Size, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, 0);
  8. glBindTexture(GL_TEXTURE_2D, 0);
  9.  
  10. glGenTextures(1, @colortex);
  11. glBindTexture(GL_TEXTURE_2D, colortex);
  12. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
  13. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
  14. glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP );
  15. glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP );
  16. glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB8, Size, Size, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
  17. glBindTexture(GL_TEXTURE_2D, 0);
  18.  
  19. glGenFramebuffersEXT(1, @fbo);
  20. glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);
  21. glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT,GL_TEXTURE_2D, depth, 0);
  22. glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT,GL_TEXTURE_2D, colortex, 0);
  23.  
  24. glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);

Code:
  1. glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);
  2.   glViewport(0, 0, Size, Size);
  3.   glMatrixMode(GL_PROJECTION);
  4.   glLoadIdentity;
  5.   gluPerspective(90, 1, 0.1, 10);
  6.   glMatrixMode(GL_MODELVIEW);
  7.   glLoadIdentity;
  8.  
  9.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  10.   glColor3f(1,0,0);
  11.   glBegin(GL_QUADS);
  12.     glTexCoord2f(0,0); glVertex3f(-1,-1,-2);
  13.     glTexCoord2f(1,0); glVertex3f(1,-1,-1);
  14.     glTexCoord2f(1,1); glVertex3f(1,1,-1);
  15.     glTexCoord2f(0,1); glVertex3f(-1,1,-2);
  16.   glEnd;
  17. glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
  18.  
  19. glViewport(0, 0, ClientWidth, ClientHeight);
  20. glMatrixMode(GL_PROJECTION);
  21. glLoadIdentity;
  22. gluPerspective(90, 1, 0.1, 10);
  23. glMatrixMode(GL_MODELVIEW);
  24. glLoadIdentity;
  25.  
  26. glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  27. glEnable(GL_TEXTURE_2D);
  28. glBindTexture(GL_TEXTURE_2D, depth);
  29. glColor3f(1,1,1);
  30. glBegin(GL_QUADS);
  31.   glTexCoord2f(0,0); glVertex3f(-1,-1,-1);
  32.   glTexCoord2f(1,0); glVertex3f(1,-1,-1);
  33.   glTexCoord2f(1,1); glVertex3f(1,1,-1);
  34.   glTexCoord2f(0,1); glVertex3f(-1,1,-1);
  35. glEnd;
  36. glBindTexture(GL_TEXTURE_2D, 0);
  37. glDisable(GL_TEXTURE_2D);

Das Ergebnis hab mich auch beigefügt. Man sieht das selbst bei den relativ dicht beieinander liegenden Werten von Near- und Farclippingplane, die Tiefenwerte von Quad und Hintergrund, sehr ähnlich sind.


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: Sa Okt 22, 2011 09:28 
Offline
DGL Member

Registriert: Di Aug 09, 2011 07:33
Beiträge: 163
Programmiersprache: C/C++
Super Danke!
Werde es nachher mal probieren aber sollte ja dann wohl klappen :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Depth Buffer in FBO
BeitragVerfasst: Sa Okt 22, 2011 15:43 
Offline
DGL Member

Registriert: Di Aug 09, 2011 07:33
Beiträge: 163
Programmiersprache: C/C++
Erfolgreich getestet ;)
Meine Textur war vermutlich nur weiss, weil ich auch zu weit entfernt war! Jetzt beim probieren mit deinem Code geht das mehr als schnell :?

Was ich mich aber noch Frage, ist der Depth-Buffer in der Textur genauer als er angezeigt wird?
Ich würde mit dem DepthBuffer gerne ein paar Dinge zur Schattenberechnung probieren und wenn das Licht aber nur gefühlte 5 Meter entfernt sein darf wäre das etwas Sinnlos! Aber ich vermute mal das dürfte nicht der Fall sein?!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Depth Buffer in FBO
BeitragVerfasst: Sa Okt 22, 2011 21:17 
Offline
DGL Member

Registriert: Fr Okt 03, 2008 13:32
Beiträge: 367
AMD hat geschrieben:
Was ich mich aber noch Frage, ist der Depth-Buffer in der Textur genauer als er angezeigt wird?

Ja, natürlich. Je nachdem was man nimmt GL_DEPTH_COMPONENT24, GL_DEPTH_COMPONENT32... hat der entsprechend 24, 32... Bit. Dargestellt wird es natürlich nur mit 256 verschiedenen Werten, weil nur Graustufen verwendet werden.

Noch eine Anmerkung am Rande: Bei einer ATI-Karte hatte ich es mal, dass bei der Verwendung von GL_DEPTH_COMPONENT (ohne Zahl dahinter) automatisch eine Textur mit 16Bit verwendet wurde, was für manche Sachen aber zu wenig ist.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Depth Buffer in FBO
BeitragVerfasst: Sa Okt 22, 2011 23:13 
Offline
DGL Member

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

Sollte ja sonst aber einen großen (Performance)Unterschied machen ob ich 24 oder 32bit nehme im FBO? Eine etwas höhere Genauigkeit tut bestimmt nicht weh :P

Edit// Okay hat sich geklärt :)

Wie man sieht klappt das mit dem Depth-Buffer auch sehr gut! Vorallem die near-plane zu erhöhen verbessertert das Ergebnis was man sieht enorm!
Bild

Also nochmal danke an alle die geholfen haben :D


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


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 Vorherige  1, 2
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

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