I'm attempting to do shadow mapping but I'm having trouble creating a depth texture. My init code is as follows.
int shadowMapSize = 512;
// Generate shadow map Texture
glGenTextures(1, &shadowMap);
glBindTexture(GL_TEXTURE_2D, shadowMap);
glTexImage2D( GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT32, shadowMapSize, shadowMapSize, 0, GL_DEPTH_COMPONENT, GL_FLOAT, 0);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glBindTexture(GL_TEXTURE_2D, 0);
// Create a render buffer
glGenRenderbuffersEXT(1,&renderBufferShadow);
glBindRenderbuffer(GL_RENDERBUFFER_EXT,renderBufferShadow);
glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT,GL_DEPTH_COMPONENT,shadowMapSize,shadowMapSize);
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0);
// Create FBO
glGenFramebuffersEXT(1,&frameBufferShadow);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, frameBufferShadow);
glDrawBuffer(GL_NONE);
glReadBuffer(GL_NONE);
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT,GL_TEXTURE_2D, shadowMap, 0);
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT,GL_DEPTH_ATTACHMENT_EXT,GL_RENDERBUFFER_EXT,renderBufferShadow);
// check FBO status
GLenum FBOstatus = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
if(FBOstatus != GL_FRAMEBUFFER_COMPLETE_EXT)
printf("GL_FRAMEBUFFER_COMPLETE failed, CANNOT use FBO\n");
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
For my rendering I do
void Game::CreateShadowMap(){
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, frameBufferShadow);
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT,renderBufferShadow);
glPushAttrib( GL_VIEWPORT_BIT );
glViewport( 0, 0, 512, 512 );
scene.DrawShadowMap();
glPopAttrib();
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT,0);
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT,0);
}
The when I try to draw the texture on the screen it is just completely black, and in my shader the shadow mapping is not doing anything.
Vertex Shader
void main() {
//other stuff
shadowTexCoord = gl_TextureMatrix[7]*gl_ModelViewMatrix*gl_Vertex;
}
Fragment Shader
void main() {
// other stuff
vec3 shadowPersp = shadowTexCoord.xyz/shadowTexCoord.w;
float depth = texture2D(shadowMap,shadowPersp.xy).r;
bool IsShadowed = false;
if (depth>shadowPersp.z)
IsShadowed=true;
// other stuff
[Edited by - Argo15 on April 3, 2010 11:11:46 AM]