0

我正在尝试绘制场景的深度图。现在,我制作了一个 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 绘制它。

然后!当我显示图像时,第一个,即直接在屏幕上绘制的一个会给出以下输出:

正确的深度图像

并且使用精灵绘制到纹理然后绘制到屏幕的那个给出了这个: 精灵绘制的图像

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

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

我会很感激任何意见。

4

1 回答 1

2

SpriteBatch 使用时修改图形设备状态。从链接的文章中,它设置了以下内容:

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

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

GraphicsDevice.DepthStencilState = DepthStencilState.Default;

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

于 2012-02-29T01:50:10.327 回答