Results 1 to 4 of 4

Thread: Does image affect shadow mapping?

  1. #1
    Junior Member Newbie
    Join Date
    Feb 2004
    Location
    Singapore
    Posts
    16

    Does image affect shadow mapping?

    I displayed a background image using gluOrtho2D before placing some objects in. When i tried shadow mapping, the objects are all in shadow. When i remove the background image, they are lit again. Is there a way to display the image without affecting the other objects?

    I tried glOrtho() and then glrasterpos3i(), but no image is displayed.

    Thanks!

  2. #2
    Guest

    Re: Does image affect shadow mapping?

    Can you give more details about :
    - how do you draw your image ?
    - how do you get the shadow map ?

  3. #3
    Junior Member Newbie
    Join Date
    Feb 2004
    Location
    Singapore
    Posts
    16

    Re: Does image affect shadow mapping?

    The image is grabbed from a camera and displayed via glDrawPixels() and gluOrtho2D().

    To get the depth map, texture projection and the extensions in "extgl.h" are used. The code shown below:

    ------------------------------------------
    //First pass - from light's point of view
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glMatrixMode(GL_PROJECTION);
    glLoadMatrixf(lightProjectionMatrix);

    glMatrixMode(GL_MODELVIEW);
    glLoadMatrixf(lightViewMatrix);

    //Use viewport the same size as the shadow map
    glViewport(0, 0,shadowMapSize , shadowMapSize);

    DisplayImage();
    //Draw back faces into the shadow map
    glCullFace(GL_FRONT);

    //Disable color writes, and use flat shading for speed
    glShadeModel(GL_FLAT);
    glColorMask(0, 0, 0, 0);

    //Draw the scene
    DrawScene();

    //Read the depth buffer into the shadow map texture
    glBindTexture(GL_TEXTURE_2D, shadowMapTexture);
    glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0,shadowMapSize , shadowMapSize);

    //restore states
    glCullFace(GL_BACK);
    glShadeModel(GL_SMOOTH);
    glColorMask(1, 1, 1, 1);

    //2nd pass - Draw from camera's point of view
    glClear(GL_DEPTH_BUFFER_BIT);

    glMatrixMode(GL_PROJECTION);
    glLoadMatrixf(cameraProjectionMatrix);

    glMatrixMode(GL_MODELVIEW);
    glLoadMatrixf(cameraViewMatrix);

    glViewport(0, 0, windowWidth, windowHeight);

    //Use dim light to represent shadowed areas
    glLightfv(GL_LIGHT1, GL_POSITION, VECTOR4D(lightPosition));
    glLightfv(GL_LIGHT1, GL_AMBIENT, white*0.2f);
    glLightfv(GL_LIGHT1, GL_DIFFUSE, white*0.2f);
    glLightfv(GL_LIGHT1, GL_SPECULAR, black);
    glEnable(GL_LIGHT1);
    glEnable(GL_LIGHTING);

    DrawScene();

    //3rd pass
    //Draw with bright light
    glLightfv(GL_LIGHT1, GL_DIFFUSE, white);
    glLightfv(GL_LIGHT1, GL_SPECULAR, white);

    //Calculate texture matrix for projection
    //This matrix takes us from eye space to the light's clip space
    //It is postmultiplied by the inverse of the current view matrix when specifying texgen
    static MATRIX4X4 biasMatrix(0.5f, 0.0f, 0.0f, 0.0f,0.0f, 0.5f, 0.0f, 0.0f,0.0f, 0.0f, 0.5f, 0.0f, 0.5f, 0.5f, 0.5f, 1.0f); //bias from [-1, 1] to [0, 1]

    MATRIX4X4 textureMatrix=biasMatrix*lightProjectionMatrix*lig htViewMatrix;

    //Set up texture coordinate generation.
    glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
    glTexGenfv(GL_S, GL_EYE_PLANE, textureMatrix.GetRow(0));
    glEnable(GL_TEXTURE_GEN_S);

    glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
    glTexGenfv(GL_T, GL_EYE_PLANE, textureMatrix.GetRow(1));
    glEnable(GL_TEXTURE_GEN_T);

    glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
    glTexGenfv(GL_R, GL_EYE_PLANE, textureMatrix.GetRow(2));
    glEnable(GL_TEXTURE_GEN_R);

    glTexGeni(GL_Q, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
    glTexGenfv(GL_Q, GL_EYE_PLANE, textureMatrix.GetRow(3));
    glEnable(GL_TEXTURE_GEN_Q);

    //Bind & enable shadow map texture
    glBindTexture(GL_TEXTURE_2D, shadowMapTexture);
    glEnable(GL_TEXTURE_2D);

    //Enable shadow comparison
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE_ARB, GL_COMPARE_R_TO_TEXTURE);

    //Shadow comparison should be true (ie not in shadow) if r<=texture
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC_ARB, GL_LEQUAL);

    //Shadow comparison should generate an INTENSITY result
    glTexParameteri(GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE_ARB, GL_INTENSITY);

    //Set alpha test to discard false comparisons
    glAlphaFunc(GL_GEQUAL, 0.99f);
    glEnable(GL_ALPHA_TEST);

    DrawScene();

    //Disable textures and texgen
    glDisable(GL_TEXTURE_2D);

    glDisable(GL_TEXTURE_GEN_S);
    glDisable(GL_TEXTURE_GEN_T);
    glDisable(GL_TEXTURE_GEN_R);
    glDisable(GL_TEXTURE_GEN_Q);

    //Restore other states
    glDisable(GL_LIGHTING);
    glDisable(GL_ALPHA_TEST);

    //Update frames per second counter
    fpsCounter.Update();

    //Print fps
    static char fpsString[32];
    sprintf(fpsString, "%.2f", fpsCounter.GetFps());

    //Set matrices for ortho
    glMatrixMode(GL_PROJECTION);
    glPushMatrix();
    glLoadIdentity();
    gluOrtho2D(-1.0f, 1.0f, -1.0f, 1.0f);

    glMatrixMode(GL_MODELVIEW);
    glPushMatrix();
    glLoadIdentity();

    -------------------------------------------

    When i display the image from camera, most of the light appears to be blocked.

  4. #4
    Member Newbie
    Join Date
    Mar 2003
    Location
    Larnaca, Cyprus
    Posts
    35

    Re: Does image affect shadow mapping?

    This looks like the code for shadowmaps from pauls tutorials page. ( http://www.paulsprojects.net/tutorials/smt/smt.html )
    I tried to use this myself and run into problems.

    if you notice, between the end of the second pass
    and the start of the 3rd pass there is no glClear(GL_DEPTH_BUFFER_BIT); and there is no goPolygonOffset(...,...); glEnable(GL_POLYGOn_OFFSET_FILL);

    so no wonder the lighting stage fails to render (due to the depth test failin?!).
    what is also weird is that Pauls code works!
    what are we missing? any idea guys?
    what
    all we are is dust in the wind, nothing lasts forever but the earth and skies

Similar Threads

  1. Replies: 1
    Last Post: 04-13-2017, 02:23 AM
  2. Variance shadow mapping: artifacts when using filtered shadow map
    By Vexator in forum OpenGL: Advanced Coding
    Replies: 2
    Last Post: 03-18-2016, 03:29 AM
  3. Replies: 2
    Last Post: 12-11-2014, 12:05 PM
  4. projective texture mapping and shadow mapping
    By phoenix_gl in forum OpenGL: Advanced Coding
    Replies: 1
    Last Post: 10-08-2012, 08:00 PM
  5. Shadow projection mapping - ATI clamp bug & how to blur shadow
    By noisecirme in forum OpenGL: Advanced Coding
    Replies: 2
    Last Post: 12-16-2003, 09:18 AM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Proudly hosted by Digital Ocean