OpenGL ES 学习教程(十六) ShadowMap的理解

目前游戏上的阴影一般用ShadowMap实现。我一直在学习LearnOpenGL上的文章,ShadowMap这一篇,说实话我两年前就开始看了,一直没明白,或者说没有认真花时间去看。

最近在给lives2d堆功能,终于也到了阴影的实现。

LearnOpenGL上ShadowMap教程地址:

http://learnopengl-cn.readthedocs.io/zh/latest/05%20Advanced%20Lighting/03%20Shadows/01%20Shadow%20Mapping/

这两天花时间,总结如下:

比如一个立方体 放在一面墙前面,立方体在墙上有投影,流程如下:

1、首先正常绘制立方体

2、以灯的位置为摄像机位置,再绘制一次,不输出颜色值。并且深度信息绑定到DepthTexture。

3、对于墙,以正常摄像机位置计算一次顶点位置得到A,再以灯位置计算一次顶点位置得到B。然后在FS中从DepthTexture中读取位置B对应的DepthTexture上的深度值,然后将墙体颜色乘深度值。

转自http://www.liveslives.com https://blog.csdn.net/huutu

难点在于如何判定墙的顶点在立方体的阴影中。

再以灯位置计算一次顶点位置得到B,这其实就是将墙的顶点,也放到了 以灯的位置摄像机 里,进行一次渲染。然后将顶点深度值和DepthTexture中的深度值进行对比,如果墙的顶点深度比DepthTexture中的值更打,那么就说明在阴影中。

 

我用一个简单的例子来说明上面的流程。

OpenGL ES 学习教程(十六) ShadowMap的理解_第1张图片

实例代码下载:

链接: https://pan.baidu.com/s/1ff5RNr6ddkTV590jDJcsmg 密码: hxgj

 

你可能感兴趣的:(OpenGL,ES,学习教程)