So, jetzt gibt es aber das nächste Problem.
Ich rendere ein paar Objekte in ein FBO, welches eine Depth-Texture hat. Anschließend rendere ich den Inhalt der Farb- sowie Tiefentextur in den Standard-Framebuffer, mit Shader. Außerdem wird natürlich die Uniform für die Texture-Unit gesetzt, auf der die Tiefentextur gebindet ist. Für das Texturobjekt der Tiefentextur ist
GL_DEPTH_TEXTURE_MODE auf
GL_ALPHA gesetzt. Zuletzt rendere ich noch einen Quad ohne Shader. Das Ergebnis sieht wie folgt aus:
Jemand eine Idee, woran das liegen könnte? Die Objekte werden ja offensichtlich irgendwie "beschnitten"..
Der Code des Fragment-Shaders, auf das wesentliche beschränkt, eigentlich absolut trivial:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
|
#version 120
uniform sampler2D texture0;
uniform sampler2D depthtex;
void main()
{
vec3 color = vec3( texture2D( texture0, gl_TexCoord[0].xy ).xy );
gl_FragColor = vec4( color, 1.0 );
gl_FragDepth = texture2D( depthtex, gl_TexCoord[0].xy ).a;
}
|
Glaube kaum, dass hier etwas falsch sein kann...
In Wahrheit wird hier ein horizontales Bluring durchgeführt... aber das spielt ja kaum eine Rolle.
Die Uniform für
"texture0" ist auf
"int( 0 )" gesetzt und für
"depthtex" auf
"int( 1 )".
Die Tiefentextur wird generiert durch:
|
C-/C++-Quelltext
|
1
2
|
glTexImage2D( GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT_24, 800, 600,
0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, NULL );
|
Das Weglassen des
GL_DEPTH_TEXTURE_MODE auf
GL_ALPHA Setzens und ein
".r" an Stelle von
".a" im Fragmentshader führt (erwartungsgemäß) zu selbigem Ergebnis.
Weiß grad nicht, was noch von Relevanz sein könnte..