XNA 4.0渲染时的背面瑕疵
我就是找不到一个解决方案来解释为什么XNA错误地渲染了我的模型。在我用XNA4.0(X文件和FBX文件)加载的每个模型上,它都会渲染一些应该隐藏/不可见的面。我甚至试过AppHubs网站上的样本附带的模型 以下是设备的backbuffer转储: 在我的其他XNA3.1项目中,所有这些模型都工作得非常好 我尝试在reach和hidef之间切换我的项目。我试过运行不同的着色器配置文件。我曾尝试在模型中包含切线,或在处理器中生成切线,甚至完全忽略切线。我还尝试使用BasicFect而不是我自己的着色器来渲染它。我尝试了不同的绘图调用(IndexedPrimitive vs UserIndexedPrimitive vs UserPrimitive)。我尝试过各种剔除选项(是的,我实际上再次导出了我的模型以尝试右手网格和翻转缠绕)、混合选项等。现在我已经没有主意了 哦,我也关注最新的DirectX版本和NVidia版本:)XNA 4.0渲染时的背面瑕疵,xna,render,Xna,Render,我就是找不到一个解决方案来解释为什么XNA错误地渲染了我的模型。在我用XNA4.0(X文件和FBX文件)加载的每个模型上,它都会渲染一些应该隐藏/不可见的面。我甚至试过AppHubs网站上的样本附带的模型 以下是设备的backbuffer转储: 在我的其他XNA3.1项目中,所有这些模型都工作得非常好 我尝试在reach和hidef之间切换我的项目。我试过运行不同的着色器配置文件。我曾尝试在模型中包含切线,或在处理器中生成切线,甚至完全忽略切线。我还尝试使用BasicFect而不是我自己的着色
有什么建议吗?好的,尼尔给了我一个研究其他着色器选项的想法 XNA4.0的一个变化是,与XNA3.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中是否有我错过的设备范围的设置?或者这始终是每个着色器控制的
更新
经过数小时的deving Stingray,我找到了一个解决方案,不需要使用旧的着色器选项。XNA设备状态工作得非常好,但在绘图之前必须立即设置它。当时我正在我的游戏初始化部分设置它。随后,我开始使用多个渲染目标,并被迫在其间更改状态,移除着色器选项后不会出现绘图问题。你在其他计算机上尝试过吗?哈哈,你发现了我没有在我尝试过的列表中列出的一件事。实际上我没有,但到明天我就准备好将测试“移动”到我的桌面上,并在那里进行尝试了。@Serve well这是我看到的唯一简单的事情。您可以尝试检查XNA 3/4差异列表中是否存在已知的陷阱。@Serve:在绘制模型之前,光栅化状态是什么?@Neil:设置为逆时针。DepthStencil设置为默认值,BlendState设置为不透明。我甚至在着色器中尝试过: