XNA 4.0渲染时的背面瑕疵

XNA 4.0渲染时的背面瑕疵,xna,render,Xna,Render,我就是找不到一个解决方案来解释为什么XNA错误地渲染了我的模型。在我用XNA4.0(X文件和FBX文件)加载的每个模型上,它都会渲染一些应该隐藏/不可见的面。我甚至试过AppHubs网站上的样本附带的模型 以下是设备的backbuffer转储: 在我的其他XNA3.1项目中,所有这些模型都工作得非常好 我尝试在reach和hidef之间切换我的项目。我试过运行不同的着色器配置文件。我曾尝试在模型中包含切线,或在处理器中生成切线,甚至完全忽略切线。我还尝试使用BasicFect而不是我自己的着色

我就是找不到一个解决方案来解释为什么XNA错误地渲染了我的模型。在我用XNA4.0(X文件和FBX文件)加载的每个模型上,它都会渲染一些应该隐藏/不可见的面。我甚至试过AppHubs网站上的样本附带的模型

以下是设备的backbuffer转储:

在我的其他XNA3.1项目中,所有这些模型都工作得非常好

我尝试在reach和hidef之间切换我的项目。我试过运行不同的着色器配置文件。我曾尝试在模型中包含切线,或在处理器中生成切线,甚至完全忽略切线。我还尝试使用BasicFect而不是我自己的着色器来渲染它。我尝试了不同的绘图调用(IndexedPrimitive vs UserIndexedPrimitive vs UserPrimitive)。我尝试过各种剔除选项(是的,我实际上再次导出了我的模型以尝试右手网格和翻转缠绕)、混合选项等。现在我已经没有主意了

哦,我也关注最新的DirectX版本和NVidia版本:)


有什么建议吗?

好的,尼尔给了我一个研究其他着色器选项的想法

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设置为不透明。我甚至在着色器中尝试过: