This topic is 1621 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

hello guys,

i follow the shadow mapping tutorial of opengl, but i got some werid image, why the depth projected on the model like this?

[attachment=22573:111.png]

the second problems is the projected texture matrix, i use the left hand coordinate,  in some tutorial the matrix is like this

[ 0.5f, 0.0f, 0.0f, 0.5f ]
0.0f, 0.5f, 0.0f, 0.5f ]
0.0f, 0.0f, 0.5f, 0.5f ]
0.0f, 0.0f, 0.0f, 1.0f ]

some are this,

[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]

so i  am confused which one is the correct one,

##### Share on other sites

The pattern you see is due to a loss of precision in the z buffer. The problem comes from when you compare the distance to a light against the distance stored in the shadow map. When calculating these two separate values, there are some rounding errors. So even though the values should come out equal in theory, in practice they rarely are equal. To fix this you need to add some sort of bias where you add a small amount to the distance read from the shadow map.

As for the matrices, both are correct. The first one you listed is the column vector version of the matrix. The second is the row vector form. For any given graphics engine you should pick one style and stick with it.

##### Share on other sites

The pattern you see is due to a loss of precision in the z buffer. The problem comes from when you compare the distance to a light against the distance stored in the shadow map. When calculating these two separate values, there are some rounding errors. So even though the values should come out equal in theory, in practice they rarely are equal. To fix this you need to add some sort of bias where you add a small amount to the distance read from the shadow map.

As for the matrices, both are correct. The first one you listed is the column vector version of the matrix. The second is the row vector form. For any given graphics engine you should pick one style and stick with it.

i'am using the auto z compare feature with  GL_COMPARE_R_TO_TEXTURE flag

glGenTextures(1, &mTex);
glBindTexture (GL_TEXTURE_2D, mTex);
glTexImage2D (GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, mSize, mSize, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, NULL);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

bool uUseZCompare = true;
if (useZCompare)
{
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_R_TO_TEXTURE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL);
}
else
{
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_NONE);
}


glsl code
uniform sampler2DShadow uShadowMapTex;


const glm::mat4 PROJ_MATRIX = glm::mat4(
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);

i'am current use texturematrix with PROJ_MATRIX  * cropMatrix * LightProjectionMatrix * LightViewMatrix to project the pos to texture coord

the problems is , where can i add "some sort of bias" as you said,  looking forward of your replys, thanks.
Edited by dreamjourney

##### Share on other sites

You have encountered one of the many shadowmapping artifacts. Here's an article about this and some other issues with shadowmapping and how to counter them, thought there will be never a perfect  and simple solution.

##### Share on other sites

You have encountered one of the many shadowmapping artifacts. Here's an article about this and some other issues with shadowmapping and how to counter them, thought there will be never a perfect  and simple solution.

i have solved this artifacts by using

glEnable(GL_POLYGON_OFFSET_FILL);
glPolygonOffset(1.0f, 1.0f);


thanks to both of you

Edited by dreamjourney

1. 1
2. 2
Rutin
21
3. 3
A4L
15
4. 4
5. 5

• 13
• 26
• 10
• 11
• 44
• ### Forum Statistics

• Total Topics
633740
• Total Posts
3013621
×