Alpha透明度分层XNA

时间:2015-11-02 03:51:38

标签: c# 3d xna layer alphablending

我目前在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”状态写入的其他对象。另请注意,在狐狸角色上,它在尾巴和头部/脸部的头发轮廓周围做同样的事情。

Image

在此图像中,深度再次失真,但最初的问题是固定的。头发网状物周围没有隐形边框。

Image

我可以想象有一些方法可以解决这个问题,因为这是一个问题,其中一个问题解决了另一个问题,但如果可能的话,我会很感激!

非常感谢。

0 个答案:

没有答案