我知道这个问题听起来似乎很容易回答,但这让我发疯。好的alpha混合机制应该处理的情况太多了,对于每种算法,我都能想到缺少一些东西。
这些是我到目前为止所使用的方法:
首先,虽然关于按深度对对象进行排序,但由于对象不是简单的形状,它们可能具有曲线,并且可能在彼此内部循环,因此这只是失败了。所以我不能总是说出哪一个离相机更近。
然后我考虑了对三角形进行排序,但是这个三角形也可能失败,以为我不确定如何实现它,在极少数情况下,可能会再次引起问题,即两个三角形相互穿过。同样,没有人能说出哪一个更近。
接下来是使用深度缓冲区,至少我们拥有深度缓冲区的主要原因是因为我提到的排序问题,但现在又遇到了另一个问题。由于对象可能是透明的,因此在单个像素中可能会看到多个对象。那么我应该为哪个对象存储像素深度?
然后,我想也许我只能存储最前面的对象深度,并以此确定我应该如何在该像素处混合下一个绘制调用。但是还是有一个问题,考虑两个半透明的平面,中间有一个实心平面。我打算在最后渲染实体平面,可以看到最远的平面。请注意,我将每两个平面合并一次,直到该像素只剩下一种颜色为止。显然,由于上述原因,我也可以使用排序方法。
最后,我认为能够工作的唯一一件事就是将所有对象渲染到不同的渲染目标中,然后对这些图层进行排序并显示最终输出。但是这次我不知道如何实现该算法。