如何解决渲染时为XNA 4.0背面伪像
| 我只是找不到关于XNA为什么不正确渲染我的模型的解决方案。在我装有XNA 4.0的每个模型(X文件和FBX文件)上,它都会渲染一些应该被隐藏/不可见的面。我什至尝试了App Hubs网站中的示例随附的模型。 这是设备的后缓冲转储: 所有这些模型在我的其他XNA 3.1项目中都可以正常工作。 我已经尝试过在覆盖率和hidef之间切换项目。我尝试运行不同的着色器配置文件。我尝试将切线包含在模型中或在处理器中生成切线,甚至完全省略它。我还尝试使用BasicEffect而不是我自己的着色器进行渲染。而且我尝试了不同的绘制调用(IndexedPrimitive与UserIndexedPrimitive与UserPrimitive)。我已经尝试了各种Cull选项(是的,实际上,我实际上再次导出了模型,以尝试使用右手网格和翻转绕线),Blend选项等。现在我全都没有主意了…… 哦,我也在最新的DirectX版本和NVidia版本中:) 有什么建议么?解决方法
好的,尼尔给了我一个研究其他着色器选项的想法。
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中的设备范围设置吗?还是总是由每个着色器控制?
更新
在经过数小时的Stingray设计之后,我为上述解决方案提供了解决方案,该解决方案不涉及使用旧的着色器选项。 XNA设备状态可以很好地工作,但是您必须在绘制之前立即进行设置。当时我在游戏初始化部分进行了设置。随后,我开始使用多个渲染目标,并被迫在两个渲染目标之间进行更改,并且删除了着色器选项时,没有发生绘制问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。