ZBuffer裁剪planar shadow

适当的操作ZBuffer可以巧妙的完成一些任务,比如我要在擂台的边缘裁剪人的影子。擂台的特点是边缘之外的地方比较低。将影子埋在擂台表面下一点点, 先绘制擂台,然后改变z test func,改为greater,并关闭z write,然后绘制影子,因为影子是在擂台下面的,这样从擂台上方看,影子具有比擂台表面更大的z值,opengl中z值大意味着离camera远,按 照正常的z测试方法,GL_LESS或GL_LEQUAL通过测试,这样影子应该画不出来,而如果将z test func设为GL_GREATER,离camera远的影子反而绘制在擂台表面上了。而在擂台的边缘,因为擂台外的像素会比影子更低,影子的z会比较小, 不能通过GL_GREATER的测试,这样擂台边缘外的影子片段就不能绘制了,也就达到了裁剪的目的。同时由于绘制影子时关闭了z write,影子的z值不会被写入,也就意味着影子之后绘制的东西能挡住影子,比如人总能踩住影子。之后恢复正常的z test并打开z write,绘制人和其他物体。
当然这个方法也并不完美,比如镜头前的物体会挡住影子,影子会浮在擂台后比较高的物体上,比如墙。我的影子是简单的平面阴影,设备没有模板缓冲,这么做似乎已经是可以达到的最好结果了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值