【问题标题】:Draw 3d model in XNA 4.0?在 XNA 4.0 中绘制 3d 模型?
【发布时间】:2011-10-16 15:51:07
【问题描述】:

我正在绘制几个模型,使用以下代码设置渲染状态:

GraphicsDevice.BlendState = BlendState.Opaque;
GraphicsDevice.DepthStencilState = DepthStencilState.Default;
GraphicsDevice.RasterizerState = RasterizerState.CullCounterClockwise;
GraphicsDevice.SamplerStates[0] = SamplerState.LinearWrap;

某些模型渲染不正确。如果我更改一行代码:

GraphicsDevice.DepthStencilState = DepthStencilState.DepthRead;

现在,其他人无法正常工作。我对每个代码段使用了 2 个代码,但它仍然不起作用。

如何解决这个渲染问题?


截图:

我先画地面,然后是“道路”模型。

顶部:http://i.stack.imgur.com/xH8qp.png

当我改变相机的角度时...:http://i.stack.imgur.com/Nbw3m.png

【问题讨论】:

  • 好的,我刚刚编辑了我的帖子。

标签: c# graphics xna 3d xna-4.0


【解决方案1】:

您的问题似乎是Z-Fighting,这是由于尝试在距相机相同距离处渲染 2 个或更多多边形而引起的。

绘制模型时,您可以禁用 Z 缓冲区。 DepthStencilState.None

【讨论】:

  • 谢谢!如果我使用 DepthStencilState.None,它会正确呈现。但是,如果我绘制一些模型,如房屋、人类……,这些模型总是在“道路”模型(相同位置)下渲染。道路模型始终位于顶部,覆盖这些模型。如果我使用 DepthStencilState.Default,这些模型会正确渲染,它们总是在顶部,覆盖道路模型,但我的帖子中的问题再次出现。所以我想解决这两个问题:当我改变相机的角度和所有模型的顺序正确时渲染正确,我该怎么办?
  • 如果你禁用深度缓冲区,那么模型绘制在哪里都​​没有关系,早期的模型将被之后绘制在同一位置的模型隐藏。我推荐这个,因为你在距离相机相等的距离处绘制所有模型(它们都在同一平面上)。确保你画了地面,然后是道路,然后是房子。如果您想使用 Z 缓冲,则将道路画得比地面更靠近相机,而房屋则更靠近。
  • 是的,非常感谢。我没有足够的声望来投票赞成你的答案。
  • 我能再问你一个问题吗?现在,我在地面上绘制了一些模型,我希望靠近我的相机将首先渲染的模型,所有远离我的相机的模型都将被它们隐藏。但是模型是稍后绘制的,它先渲染,所有模型都先绘制,它们被隐藏了。我的意思是透视或类似的。你能帮我吗?
  • 我不太确定您在问什么,但由于这是一个新问题,因此请在此站点上发布一个新问题。顺便说一句,除了对答案进行投票外,如果您提出问题,您可以通过单击投票位置旁边的绿色勾号将答案标记为最佳答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-23
  • 2013-08-10
  • 1970-01-01
  • 2012-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多