在我的 XNA 3D 游戏中,由于某种原因,深度缓冲区已关闭并被忽略 - 尽管我已经尽我所能找到启用它(诚然,这并不多,但它应该很简单......不要提及默认)
在渲染模型之前:
global.GraphicsDevice.DepthStencilState = DepthStencilState.Default;
更早的地方:
graphics.PreferredDepthStencilFormat = DepthFormat.Depth24Stencil8;
graphics.ApplyChanges();
模型使用带有 device.DrawUserIndexedPrimitives 和 BasicEffect 的 Vertex/Index 列表进行渲染。
结果是这样的:
紫色物体离相机很远,第一个被绘制。
灰色物体非常靠近相机,并被第二次绘制。
蓝色物体距离相机中等距离,被绘制在第 3 位。
灰色对象在蓝色对象后面渲染- 如果您要关闭绘制顺序,这是正确的,但我希望它按与相机的距离进行组织(使用深度缓冲区),在这种情况下,灰色对象应该绘制蓝色物体的前面。
(而且,不,只是手动快速排序它们,虽然它可能提供一个临时解决方案,但不是解决这个问题的方法)
- 更新:这与我渲染到 RenderTarget2D 而不是直接渲染到屏幕上的事实直接相关。(如果我在屏幕上渲染而不是渲染目标,则深度计算正确。程序的其他部分需要渲染目标......或等效系统。)