我正在渲染一个包含部分透明纹理的分支网格的树。
如果我使用AlphaTestEffect来渲染它,并将ReferenceAlpha设置为低,我会得到这个。
我想用BasicEffect渲染树,但是,这是我得到的结果。 BlendState被设置为NonPremultiplied。
我甚至不知道我在看什么。 看起来最近的分支的透明区域覆盖了它后面的那个(而不是树干)。 如果我将DepthState设置为DepthRead,那么所有的分支都是乱序的。
究竟是什么问题呢?
问题是你不要在这里排列你的多边形,因此不能正确使用alpha混合。 解决这个问题的常用方法是:
也有一些先进的技术(顺序独立的透明度),由于其性能饥饿性质,它们并不真正用于实时应用程序。
如果您正在使用渲染目标而不是直接渲染到屏幕上,请确保使用渲染目标的最完整的构造函数重载来构建它,以便您可以指示它创建深度缓冲区。
除此之外,你应该把你的DepthStencilState设置为默认不读取,因为这意味着你的分支只能进行深度testing,而不是已经在深度缓冲区中,而不是对自己。
BlendState应该设置为AlphaBlend。 这是我认为唯一的select,支持半透明纹理。 NonPreMultiplied只能用于没有使用XNA内容管道导入的内容。
请注意,JánosTuránszki是正确的,我只是在这里列出了如何在XNA中完成。