具有Alpha纹理的网格不能正确混合

我已经遵循了关于设置OutputMerger的BlendState以在网格上启用alpha /透明纹理的各种示例。 设置如下:

var transParentOp = new BlendStateDescription { SourceBlend = BlendOption.SourceAlpha, DestinationBlend = BlendOption.InverseDestinationAlpha, BlendOperation = BlendOperation.Add, SourceAlphaBlend = BlendOption.Zero, DestinationAlphaBlend = BlendOption.Zero, AlphaBlendOperation = BlendOperation.Add, }; 

我做了一个样本,显示3个网格A,B和C,其中每个重叠。 它们按顺序绘制,A到C.距离相机最近的A和C最远的距离。 所以,预期的产出是A看透了,看到了B和C的一部分.B会看透C的一部分。

但是我得到的却是他们没有看到这个顺序,但是如果我把C移近相机,那么它将是半透明的,并且通过A和B来看。如果靠近相机移动会看到A而不是C.反向sorting。

所以看来我需要以相反的顺序绘制,最远的地方是相机最先绘制,然后最近绘制相机。

是否这样做,或者我可以实际configuration的blendstate,所以它的工作,无论我以何种顺序绘制它们?

谢谢

是的,这是混合的基础:你必须手动排列你的对象从更远到更近,所以当对象B被绘制并遮挡A时,alpha函数会正确地合并两种颜色。 此外,绘制透明物体时禁用深度写入。