View more

View more

View more

### Image of the Day Submit

IOTD | Top Screenshots

### The latest, straight to your Inbox.

Subscribe to GameDev.net Direct to receive the latest updates and exclusive content.

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

4 replies to this topic

### #1dreamjourney  Members

Posted 08 July 2014 - 03:32 PM

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?

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,

### #2HappyCoder  Members

Posted 08 July 2014 - 04:26 PM

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.

My current game project Platform RPG

### #3dreamjourney  Members

Posted 09 July 2014 - 12:52 AM

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, 09 July 2014 - 12:55 AM.

### #4Ashaman73  Members

Posted 09 July 2014 - 05:27 AM

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.

Ashaman

### #5dreamjourney  Members

Posted 09 July 2014 - 05:36 AM

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, 09 July 2014 - 05:36 AM.

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.