在我的XNA 3D游戏中,由于某种原因,深度缓冲区已经关闭并被忽略 - 即使我已经完成了我能找到的所有内容(它确实不是很多,但它应该很简单..更不用说默认了)
在渲染模型之前:
global.GraphicsDevice.DepthStencilState = DepthStencilState.Default;
早些时候:
graphics.PreferredDepthStencilFormat = DepthFormat.Depth24Stencil8;
graphics.ApplyChanges();
使用带有device.DrawUserIndexedPrimitives和BasicEffect的顶点/索引列表渲染模型。
它是这样的:
紫色物体距离相机很远,并且被绘制为第1个。
灰色物体非常靠近相机,并被绘制为第二个。
蓝色物体与相机的中距离,并被绘制为第3个。
灰色物体正在后面渲染蓝色物体 - 如果您要离开绘制顺序,这是正确的,但我希望它能够按距离相机进行组织(使用深度缓冲区) ,在这种情况下,灰色物体应该在蓝色物体前面绘制。
(并且,不,只是手动快速排序,虽然它可能提供临时解决方案,但不是解决此问题的方法)
答案 0 :(得分:1)
我随机搜索后发现自己错过了什么:
RenderTarget2D默认禁用其DepthBuffer。
我只需要在我绘制的rendertarget上设置DepthFormat。
知道我错过了一些明显的东西......
(当网站允许我时,我会在4小时内进行绿色复选标记。) ED:也就是说,除非在那段时间内有人发布了可以/应该设置的XNA深度缓冲区数据的好列表,以便更好地帮助那些可能通过谷歌找到这个主题的人。