在渲染流程中: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抠图,以及淡淡的描边让图片更好看一些。