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

Aktuelle Zeit: Fr Jul 18, 2025 11:23

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



Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Einfaches Shadowmapping
BeitragVerfasst: Di Okt 26, 2010 11:46 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
Moin,

sooo nun sind die Schatten drin :D
Ich würde gern eine einfache Art (kann ruhig ein paar Kanten haben) von Shadowmaps mit meinem Lampen realisieren. Ich bräuchte eigentlich "nur" eine Abfrage ob meine Lampe die Lichttextur projezieren soll oder nicht.. Soweit so gut..

1. Wie bekomme ich den Tiefenpuffer in eine Textur ohne FBO's?
2. Wie muss der Fragmentvergleich aussehen?

Grüße
Thomas


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Einfaches Shadowmapping
BeitragVerfasst: Di Okt 26, 2010 11:51 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
1. Wie bekomme ich den Tiefenpuffer in eine Textur ohne FBO's?

Gar nicht, bzw. nicht sinnvoll. Was spricht gegen FBOs? Ich mein du benutzt Shader und FBOs wurden etwa zur gleichen Zeit eingeführt (glaub ich).

Zitat:
2. Wie muss der Fragmentvergleich aussehen?

Forensuche....das habe ich vor nicht allzu langer Zeit schon mal wem erklärt, ich glaube das warst sogar du. ;)

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Einfaches Shadowmapping
BeitragVerfasst: Di Okt 26, 2010 12:18 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
Nun ich kann doch nur eine gewissen anzahl an FBOs erstellen oder? Ich müsste aber min. 4 Tiefentexturen in den Shader bekommen. Ich habe das hier gefunden:

Code:
        glBindTexture(GL_TEXTURE_2D, lights[i].shadowmap);
        glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, shadowMapSize, shadowMapSize);
        glBindTexture(GL_TEXTURE_2D, 0);


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Einfaches Shadowmapping
BeitragVerfasst: Di Okt 26, 2010 12:31 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Äh, ich denke die Anzahl der FBOs ist nicht wirklich beschränkt. Des weiteren brauchst du auch nur einen FBO, den du kannst ja auch die Textur (=Tiefenbuffer) aushängen und eine andere einhängen. Ist sogar schneller als ein FBO-Wechsel.

Bei der Verwendung von glCopyTexSubImage2D wird die Textur einmal mehr als notwendig kopiert => schlecht.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Einfaches Shadowmapping
BeitragVerfasst: Di Okt 26, 2010 12:42 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
Ich weis so würde es gehen > GL_COLORATTACHMENT0_EXT .. doch meine Graka unterstützt davon 8.. wie siehts bei anderen aus?

glGetIntegerv(GL_MAX_COLOR_ATTACHMENTS_EXT, @maxbuffers);


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Einfaches Shadowmapping
BeitragVerfasst: Di Okt 26, 2010 12:53 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
GL_COLORATTACHMENT0_EXT bis 8 oder was auch immer sind für gleichzeitig gebundene Texturen! Du brauchst die aber eh nur nacheinander. Oben drein benötigst du sowieso das DEPTH_ATTACHMENT.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Einfaches Shadowmapping
BeitragVerfasst: Di Okt 26, 2010 15:02 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
ok, dann versuch ichs mit ner FBO für Schatten. Also muss ich quasi für jede Lampe dann doch ein eignen FBO erstellen?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Einfaches Shadowmapping
BeitragVerfasst: Di Okt 26, 2010 15:22 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Bitte lies zur Abwechslung mal was ich schreibe ;) :)
Coolcat hat geschrieben:
Des weiteren brauchst du auch nur einen FBO (...)

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Einfaches Shadowmapping
BeitragVerfasst: Di Okt 26, 2010 15:34 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
aber ich hab doch bloß einen Tiefenpuffer pro FBO?! Auch das FBO-Codebeispiel aus dem Tutorial (http://wiki.delphigl.com/index.php/GLSL ... d_Schatten) liefert einen fehler > glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) ist <> GL_FRAMEBUFFER_COMPLETE_EXT


hier noch die komplette Funktion zum erstellen:

Code:
function gsGenShadowFBO(Var AFBO: TFBOInfo): TBool32;
var
  FBOState: TuInt32;
begin
 with AFBO do
  begin
      glGenTextures(1, @image);
      glBindTexture(GL_TEXTURE_2D, image);
      glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT16, width, height, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, NIL);
      glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

      glGenFramebuffersEXT(1, @container);
      glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, container);
      glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_TEXTURE_2D, container, 0);
      glDrawBuffer (GL_FALSE);
      glReadBuffer(GL_FALSE);


            FBOState:= glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
      If FBOState = GL_FRAMEBUFFER_COMPLETE_EXT
      Then Result:= TRUE
      Else Result:= FALSE;

      glBindFramebufferEXT(GL_FRAMEBUFFER_EXT,0); // Unbind
  end;
end;


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Einfaches Shadowmapping
BeitragVerfasst: Di Okt 26, 2010 15:45 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Code:
//Initialisierung:
FBO erstellen
FBO binden
Einen ColorBuffer an den FBO binden (ich glaub man braucht einen => ggf. RenderBuffer nehmen)
FBO abschalten

// Rendern:
FBO binden
Schleife von 0 bis 10
begin
    Tiefentextur für Lampe i an GL_DEPTH_ATTACHMENT_EXT des FBO binden
    glCheckFramebufferStatusEXT zu debug-Zwekcen
    Tiefenbuffer leeren
    Aus Sicht von Lampe i rendern
end
FBO abschalten


Zitat:
Code:
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_TEXTURE_2D, container, 0);

Ich glaube das muss "image" sein und nicht "container".

_________________
Yeah! :mrgreen:


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 » OpenGL


Wer ist online?

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