我正在尝试绘制场景的深度贴图。 现在,我制作了一个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画了它。
然后!当我显示图像时,第一个,即直接绘制到屏幕上的图像给出了这个输出:
然后使用精灵绘制到纹理然后到屏幕的那个给出:
注意在第二次捕获中,身体的右臂显然是在身体后面,被绘制成好像身体在重叠区域中不存在。
我认为,这是一个排序问题,因为前面的顶点首先被绘制到纹理,然后更远的顶点覆盖更接近的顶点,从而产生观察到的图像。
我很感激任何意见。
答案 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;
您可能还需要设置其他一些状态,具体取决于渲染所需的状态。