我遇到了XNA SpriteBatch对象的问题。
当我在其他元素前面绘制一个半透明的元素时,其他元素将完全隐藏,直到半透明元素完全透明。这真是令人沮丧,因为我试图做出淡入和淡出的效果。
Batch.Instance.SpriteBatch.Begin(SpriteSortMode.Deferred,BlendState.AlphaBlend,SamplerState.LinearClamp,DepthStencilState.Default,RasterizerState.CullNone,null);
这就是我启动SpriteBatch的方法。如您所见,我将其设置为CullNone,但它似乎仍然进行Z-culling。
我该如何防止这种情况?
答案 0 :(得分:3)
Z-culling是DepthStencilState
的属性。要将其关闭,您需要使用DepthStencilState.None
。 RasterizerState
执行的剔除是按三角形顺序排列的。 Which I already explained to you in detail here
您无法使用具有透明度的深度缓冲区。您可以使用alpha测试作为“alpha cut-out”的解决方法。但是对于半透明物体(例如它们淡入和淡出时),以深度顺序绘制它们是唯一选项。
我已经向您建议了here。你从来没有在那里回答过我的问题:你为什么要用这种方式绘制你的GUI呢?
有关详细信息:I've gone into more detail about transparency and the Z-buffer here。