cocos2d中 depth test 和 alpha blend 冲突的解决总结

在渲染流程中:depth test总是在alpha blend之前完成。只有在depth test通过之后,设计到具体怎么和背景图融合的时候,才会发生alpha blend。如果透明物体先被渲染。因为透明物体的z值比大,在后渲染背景的时候。背景的像素点是通不过depth测试的,这样也就不会融合到透明物件上。

在使用batchnode的时候。因为在同一个batchnode里面的所有sprite都得一起渲染,所以不可能把其他sprite的渲染插入到这个batchnode中间渲染。但如果又必须要求有这样的渲染顺序,那么仅仅通过调整渲染顺序就不能解决问题了。这时只有被迫打开depth test,使用vertexZ来控制sprite的上下关系。

1,在同一个batchnode的中的sprite,可以使用zorder来控制渲染顺序。这时的zorde不用来调整上下关系,二是用来控制渲染顺序解决alpha的冲突。

2,对于所有没使用batchnode的sprite可以把zorder设为和vertexz一样,这样就能做到远的东西先渲染。从而解决alpha的冲突。

3,对于分别在不同的batchnode里面的sprite,这些sprite的渲染顺序只能由起所在batchnode决定。这时只能打开alpha test,把透明部分的像素点的z值不要写入zbuffer中。这就需要对物件边缘的精确的0,1抠图,以及淡淡的描边让图片更好看一些。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值