目前游戏上的阴影一般用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的理解

实例代码下载:

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

 

相关文章:

  • 2021-08-14
  • 2021-09-28
  • 2021-12-07
  • 2021-08-18
  • 2022-02-16
  • 2022-01-02
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-08-19
  • 2021-07-01
  • 2021-11-26
  • 2021-12-21
相关资源
相似解决方案