我对 XNA 中的树有疑问。当我有树时,我需要使用 alpha 混合使非叶子部分透明,但是模型的某些部分没有正确显示,因此 alpha 混合失败。我想知道是否有可能读取网格位置来对它们进行排序,或者是否有任何其他方法可以获得透明的非叶子部分。在模型中排序可能不起作用,因为我想从各个角度看这棵树。
问问题
338 次
2 回答
1
3D 环境中的 Alpha 混合可能是一个棘手的问题。Shawn Hargreaves几年前写了一篇文章,涉及大多数主要问题(标题为Painter's Algorithm的部分专门处理您的问题)。长话短说:没有技术可以完美地做你想做的事,所以问题就变成了:你愿意做出什么取舍?
进行 alpha 测试而不是 alpha 混合可能是最简单的解决方案。这是一个二元测试,其中一个不透明的像素要么出现要么不出现,因此绘制这些像素的顺序在很大程度上是无关紧要的。这会给你带来坚硬的边缘,但如果你的纹理有足够的分辨率,它仍然看起来不错;我知道魔兽世界使用了这种技术,而且我很确定我记得在暗黑破坏神 III 中看到过它。
您可以使用内置的AlphaTestEffect
来执行此操作,或者自己在像素着色器中实现它。
于 2012-12-18T18:53:42.530 回答