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

Posted _Captain

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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上的深度值,然后将墙体颜色乘深度值。

 

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

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

 

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

实例代码下载:

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

 

以上是关于OpenGL ES 学习教程(十六) ShadowMap的理解的主要内容,如果未能解决你的问题,请参考以下文章

IOS – OPenGL ES 调节图像饱和度 GPUImageSaturationFilter

Android上OpenGL-ES游戏的教程和库[关闭]

IOS – OpenGL ES 图像漩涡 GPUImageSwirlFilter

IOS OpenGL ES GPUImage GPUImageWeakPixelInclusionFilter

IOS – OpenGL ES 图像漩涡 GPUImageSwirlFilter

IOS – OpenGL ES 图像漩涡 GPUImageSwirlFilter