我目前在XNA中遇到一些alpha透明度问题,对于任何有框架经验的人我都会感激一些帮助。代码如下,但在此代码示例中请注意:
ReadStencil = new DepthStencilState()
{
DepthBufferEnable = true,
DepthBufferWriteEnable = false
};
和...
WriteStencil = new DepthStencilState()
{
DepthBufferEnable = true,
DepthBufferWriteEnable = true
};
所以这是实际的代码:
SB.Begin();
GraphicsDevice.DepthStencilState = WriteStencil;
if (Scene != null) Scene.Draw();
Map.Draw();
SB.End();
SB.Begin();
GraphicsDevice.DepthStencilState = ReadStencil;
for (int i = 0; i < Players.Length; i++) if (Players[i] != null && Players[i].Active && Players[i].Respawn <= 0) Players[i].Draw();
if (Effects.Count > 0) for (int i = 0; i < Effects.Count; i++) Effects[i].Draw();
在此图像中,深度设置为DepthStencilState.Default。当然,这种情况下的深度是正确的,但看起来似乎是在透明度后面绘制阶段而不是它后面的对象部分/以“WriteStencil”状态写入的其他对象。另请注意,在狐狸角色上,它在尾巴和头部/脸部的头发轮廓周围做同样的事情。
在此图像中,深度再次失真,但最初的问题是固定的。头发网状物周围没有隐形边框。
我可以想象有一些方法可以解决这个问题,因为这是一个问题,其中一个问题解决了另一个问题,但如果可能的话,我会很感激!
非常感谢。