Alpha图层错误

时间:2014-02-24 18:58:21

标签: c# xna alpha blender

XNA中的alpha图层存在很大问题。 你可以自己看看

screenshot

我想在树后绘制叶子,但我不知道该怎么做,因为叶子和树在一个模型中,由几个网格组成......

如果有人能向我解释如何处理这个问题,那将是完美的。

2 个答案:

答案 0 :(得分:2)

我发现了问题,也许它可以帮助其他人:

_graphics.DepthStencilState = DepthStencilState.DepthRead;
        for (int i = 0; i < models.Count; i++)
            if (cam.BoundingVolumeIsInView(models[i].BoundingSphere))
                models[i].Draw(cam._view, cam._projection, cam._cameraPos);
        _graphics.DepthStencilState = DepthStencilState.Default;

此处的循环对应于我的所有模型,因此,您需要编写

_graphics.DepthStencilState = DepthStencilState.DepthRead;
在绘制之前

_graphics.DepthStencilState = DepthStencilState.Default;
绘图后

答案 1 :(得分:0)

首先,确保渲染目标具有深度缓冲区,否则三角形将按顺序绘制(根据索引缓冲区)而不管它们在空间中的位置,因为着色器没有深度概念或面部在前面彼此。

finalFrameRT = new RenderTarget2D(GraphicsDevice, GraphicsDevice.Viewport.Width, GraphicsDevice.Viewport.Height, false, SurfaceFormat.Color, DepthFormat.Depth24, 0, RenderTargetUsage.PreserveContents);

将Depth24更改为最适合您的人。请参阅:DepthFormat Enumeration

这是一个很好的资源: What is a Depth Buffer?

另外请确保您使用的是BlendState.AlphaBlend而不是BlendState.Opaque,因为后者总是会导致像素被覆盖目的地。