XNA SpriteBatch忽略了我的剔除选项?

时间:2011-06-26 12:45:55

标签: xna xna-4.0 sprite

我遇到了XNA SpriteBatch对象的问题。

当我在其他元素前面绘制一个半透明的元素时,其他元素将完全隐藏,直到半透明元素完全透明。这真是令人沮丧,因为我试图做出淡入和淡出的效果。

  

Batch.Instance.SpriteBatch.Begin(SpriteSortMode.Deferred,BlendState.AlphaBlend,SamplerState.LinearClamp,DepthStencilState.Default,RasterizerState.CullNone,null);

这就是我启动SpriteBatch的方法。如您所见,我将其设置为CullNone,但它似乎仍然进行Z-culling。

我该如何防止这种情况?

1 个答案:

答案 0 :(得分:3)

Z-culling是DepthStencilState的属性。要将其关闭,您需要使用DepthStencilState.NoneRasterizerState执行的剔除是按三角形顺序排列的。 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