XNA深度图重叠区域颜色

时间:2012-02-28 18:48:27

标签: xna xna-4.0 hlsl depth

我正在尝试绘制场景的深度贴图。 现在,我制作了一个HLSL文件,如:http://www.riemers.net/eng/Tutorials/XNA/Csharp/Series3/Shadow_map.php 一切都很顺利。然而!我想找出每个像素的确切值,所以我创建了一个新的渲染目标,而不是绘制正常的渲染目标,而是创建了一个Texture2D,如:http://www.riemers.net/eng/Tutorials/XNA/Csharp/Series3/Render_to_texture.php 然后我用spritebatch画了它。

然后!当我显示图像时,第一个,即直接绘制到屏幕上的图像给出了这个输出:

Correct Depth Image

然后使用精灵绘制到纹理然后到屏幕的那个给出: Sprite drawn Image

注意在第二次捕获中,身体的右臂显然是在身体后面,被绘制成好像身体在重叠区域中不存在。

我认为,这是一个排序问题,因为前面的顶点首先被绘制到纹理,然后更远的顶点覆盖更接近的顶点,从而产生观察到的图像。

我很感激任何意见。

1 个答案:

答案 0 :(得分:2)

使用时

SpriteBatch modifies the graphics device state。从链接的文章中,这是它设置的内容:

GraphicsDevice.BlendState = BlendState.AlphaBlend;
GraphicsDevice.DepthStencilState = DepthStencilState.None;
GraphicsDevice.RasterizerState = RasterizerState.CullCounterClockwise;
GraphicsDevice.SamplerStates[0] = SamplerState.LinearClamp;

您可能希望将深度模板状态设置回默认值(深度读取和写入)。

GraphicsDevice.DepthStencilState = DepthStencilState.Default;

您可能还需要设置其他一些状态,具体取决于渲染所需的状态。