Ogre阴影实现原理解析

2 篇文章 0 订阅
2 篇文章 0 订阅

作者本人对Ogre研究也不是很深,本文仅供初学者参考
这里介绍两种阴影实现原理,阴影锥阴影和纹理阴影

一、阴影锥阴影

顾名思义,阴影锥阴影其实就是创建一个椎体。

我们以光源位置为起点,和需要产生阴影的物体的外围轮廓(光源作为参考位置)连线然后无限延伸,这样就得到了一个椎体,利用这个椎体做模板测试。

我们把面对摄像机为正面的椎体面先绘制一遍,在相应的模板位置+1

我们把背对摄像机为反面的椎体面再绘制一遍,在相应的模板位置-1

最终模板测试的时候,模板数值>=1的就为阴影点,否则则不是

因为阴影锥无限延伸也不会造成变形,所以阴影锥产生的阴影是不会有锯齿边的,但是因为计算阴影锥失效率降低了很多,故大场景实时阴影用此方法不可取


二、纹理阴影

纹理阴影相对来说就会复杂一点了,但是好处也很多,后面再详细叙述
第一步,我们先创建一张RTT纹理,用于渲染阴影。在光源点创建一个摄像机(计算出视图投影矩阵为M1),将需要产生阴影的物体渲染一遍,注意此时渲染到上一步创建的纹理上面,并且只需要渲染深度值到纹理就行了(记录纹理为T1),这样第一步就完成了
第二步,我们利用Shader编程在顶点程序里面,将M1、T1传入到GPU里面,当渲染一个顶点P的时候,我们先计算出顶点的世界坐标PW,利用PW和M1计算出在M1矩阵下投影出的位置PM1,取X,Y为纹理坐标,取出TI里面的深度值,与PM1深度值作比较,若比PM1大,则说明是阴影,进行下一步的阴影混合
第三步,在片段程序里面进行阴影混合即可


其实想想,CF里面的喷涂,其实实现方式应该和上述纹理阴影很类似。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值