XNA中的alpha图层存在很大问题。 你可以自己看看
我想在树后绘制叶子,但我不知道该怎么做,因为叶子和树在一个模型中,由几个网格组成......
如果有人能向我解释如何处理这个问题,那将是完美的。
答案 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,因为后者总是会导致像素被覆盖目的地。