Draw 3d model in XNA 4.0?
我正在绘制几个模型,并使用以下代码来设置渲染状态:
1 2 3 4
| GraphicsDevice.BlendState = BlendState.Opaque;
GraphicsDevice.DepthStencilState = DepthStencilState.Default;
GraphicsDevice.RasterizerState = RasterizerState.CullCounterClockwise;
GraphicsDevice.SamplerStates[0] = SamplerState.LinearWrap; |
某些模型渲染不正确。如果我更改一行代码:
1
| GraphicsDevice.DepthStencilState = DepthStencilState.DepthRead; |
现在,其他人无法正常工作。我在每个代码段中使用了2个代码,但仍然无法正常工作。
如何解决此渲染问题?
屏幕截图:
我先绘制地面,然后是"道路"模型。
顶部:http://i.stack.imgur.com/xH8qp.png
当我改变相机的angular时...:http://i.stack.imgur.com/Nbw3m.png
您的问题似乎是Z角战斗,此问题是由于尝试在距相机相同距离处渲染2个或更多多边形而引起的。
绘制模型时,可以禁用Z缓冲区。 DepthStencilState.None
- 谢谢!如果我使用DepthStencilState.None,它将正确呈现。但是,如果我绘制一些模型,例如房屋,人等...,则这些模型总是在道路模型(相同位置)下渲染。道路模型始终位于最上方,覆盖这些模型。如果我使用DepthStencilState.Default,这些模型将正确渲染,它们始终位于顶部,覆盖道路模型,但是我在帖子中遇到的麻烦再次出现。因此,我想解决两个问题:更改相机angular时正确渲染,并且所有模型的顺序正确,我该怎么办?
-
如果禁用深度缓冲区,则在哪里绘制模型都没有关系,早期的模型将被以后在同一位置绘制的模型隐藏。我之所以推荐这样做,是因为您在与相机等距的距离上绘制了所有模型(它们都在同一平面上)。确保先绘制地面,再绘制道路,再绘制房屋。如果要使用Z缓冲,则将道路绘制成比地面稍微靠近摄像机,并使房屋更靠近。
-
是的,非常感谢。我没有足够的声誉来投票赞成你的答案。
-
我可以再问一个问题吗?现在,我在地面上绘制了一些模型,我希望几乎所有相机都会首先渲染的模型,而到我相机远的所有模型都将被它们隐藏。但是后来绘制了模型,首先渲染,然后首先绘制了所有模型,它们被隐藏了。我的意思是这样的观点。你能帮助我吗 ?
-
我不太确定您要问什么,但是由于它是一个新问题,只需在此站点上发布一个新问题即可。顺便提一下,除了投票答案外,如果您提出了这个问题,也可以单击投票位置旁边的绿色对勾,将答案标记为最佳答案。
-
可以,但投票需要15点声望。我只有6个
-
您应该可以接受我的回答。接受答案如何运作?