Some stuff about depth texture based shadow mapping
2014-03-11 20:37
375 查看
// Tex coord is actually the vertices projected to the near projection plane of the light projection space.
// Depth texture is just like mapped to the near projection plane(a quad ranges from -1.0 to 1.0 according to
// the x and ycoordinate axes of the light projection space). And shadow texcoord is just used to sample the
// depth texture and map correct texels to the corresponding fragment.
// In depth texture, color of objects and surfaces that light CANNOT arrive is definitely white(vec4(1.0)) or
// black(vec4(vec3(0.0), 1.0)) depends on your hardware. Color of those light can arrive is a gray-scale color
// (depth-distance from light source).
// NOTICE: with GL_TEXTURE_COMPARE_MODE GL_COMPARE_REF_TO_TEXTURE and
GL_TEXTURE_COMPARE_FUNC GL_LEQUAL, depth texture sampling color will be like above.
// so the function "textureProj()" works with the following rule:
// 1. if the color of the sampled texel is white(or black), it can be considered that this fragment is in the
// shadow;
// 2. if the color of the sampled texel is a gray-scale color, the corresponding fragment is being illuminated.
// shade normally with lighting.
// So key is to transform vertices into light projection space, project them to the near plane of the light
// Projection frustum, and then use them as texcoords, and run further steps in fragment shader with textureProj().
// Depth texture is just like mapped to the near projection plane(a quad ranges from -1.0 to 1.0 according to
// the x and ycoordinate axes of the light projection space). And shadow texcoord is just used to sample the
// depth texture and map correct texels to the corresponding fragment.
// In depth texture, color of objects and surfaces that light CANNOT arrive is definitely white(vec4(1.0)) or
// black(vec4(vec3(0.0), 1.0)) depends on your hardware. Color of those light can arrive is a gray-scale color
// (depth-distance from light source).
// NOTICE: with GL_TEXTURE_COMPARE_MODE GL_COMPARE_REF_TO_TEXTURE and
GL_TEXTURE_COMPARE_FUNC GL_LEQUAL, depth texture sampling color will be like above.
// so the function "textureProj()" works with the following rule:
// 1. if the color of the sampled texel is white(or black), it can be considered that this fragment is in the
// shadow;
// 2. if the color of the sampled texel is a gray-scale color, the corresponding fragment is being illuminated.
// shade normally with lighting.
// So key is to transform vertices into light projection space, project them to the near plane of the light
// Projection frustum, and then use them as texcoords, and run further steps in fragment shader with textureProj().
相关文章推荐
- Ogre Depth Shadow Mapping
- some useful stuff about TCP/IP
- Answers to some common problems and questions about Xen
- Screen Space Depth Varying Glow based on Heat Diffusion
- Common Techniques to Improve Shadow Depth Maps
- Some examples about how to write anonymous method and lambda expression
- Some important things about C language
- OpenGL ES From the Ground Up, Part 6: Textures and Texture Mapping
- 【Unity Shader】Shadow Caster、RenderType和_CameraDepthTexture
- some ideAs About steAlth for rootkit
- Some resource about Machine Learning
- Some sample about infinite sum
- Some Problems About Frame Synchronization Framework
- Some thing about kali linux lite
- Some things about the ASCII,Unicode and UTF-8
- ASP.NET 事件日历(some resource about Event Calendar)
- Improving Android ORMLite foreign key mapping , based on new version 5.0
- Share some tips about android develop(一)
- Some simple facts about XML (一)
- A Userful Class:CActiveDirectoryUsers to Get some information about ActiveDirectory