我无法找到解决XNA为什么错误地渲染我的模型的解决方案。在我加载了XNA 4.0(X文件和FBX文件)的每个模型上,它渲染了一些应该隐藏/不可见的面。我甚至尝试过App Hubs网站上的样本附带的模型。
这是设备的后备缓冲区转储:
所有这些模型在我的其他XNA 3.1项目中运行得非常好。
我尝试在覆盖率和hidef之间切换我的项目。我尝试过运行不同的着色器配置文件。我尝试在模型中包含切线或在处理器中生成切线,甚至完全省略它。我也尝试使用BasicEffect而不是我自己的着色器渲染它。我尝试过不同的绘制调用(IndexedPrimitive vs UserIndexedPrimitive vs UserPrimitive)。我已经尝试了各种Cull选项(是的,我实际上再次导出我的模型以尝试右手网格和翻转缠绕),混合选项等等。现在我完全没有想法......
哦,我也在使用最新的DirectX版本和NVidia版本:)
有什么建议吗?
答案 0 :(得分:1)
好的,Neil给了我一个研究其他着色器选项的想法。
XNA 4.0中的一个变化是,与XNA 3.1相比,设置不同的状态要容易得多。基本上,根据大多数文档和博客,以下应该就足够了:
_device.DepthStencilState = DepthStencilState.Default;
_device.RasterizerState = RasterizerState.CullCounterClockwise;
_device.BlendState = BlendState.Opaque;
但是,在着色器中,启用了以下选项(特别是Z选项),问题就会消失,并且它会正确绘制对象:
technique Main
{
pass p0
{
VertexShader = compile vs_3_0 standardVS();
ZEnable = true;
ZWriteEnable = true;
ZFunc = LessEqual;
AlphaBlendEnable = true;
CullMode = ccw;
PixelShader = compile ps_3_0 standardPS();
}
}
(着色器代码格式不正确)
所以......我错过了XNA 4.0中的设备范围设置吗?或者这是否始终按着色器控制?
<强>更新强> 经过几个小时的deing Stingray,我得到了上面的解决方案,不涉及使用旧的着色器选项。 XNA设备状态运行良好,但您必须在绘制之前将其设置为立即。当时我在游戏初始化部分设置了它。随后我开始使用多个渲染目标,并被迫更改两者之间的状态,并且删除着色器选项时不会出现绘图问题。