渲染时XNA 4.0背面的工件

时间:2011-05-24 12:26:09

标签: xna render

我无法找到解决XNA为什么错误地渲染我的模型的解决方案。在我加载了XNA 4.0(X文件和FBX文件)的每个模型上,它渲染了一些应该隐藏/不可见的面。我甚至尝试过App Hubs网站上的样本附带的模型。

这是设备的后备缓冲区转储: incorrect clipping/hiding

所有这些模型在我的其他XNA 3.1项目中运行得非常好。

我尝试在覆盖率和hidef之间切换我的项目。我尝试过运行不同的着色器配置文件。我尝试在模型中包含切线或在处理器中生成切线,甚至完全省略它。我也尝试使用BasicEffect而不是我自己的着色器渲染它。我尝试过不同的绘制调用(IndexedPrimitive vs UserIndexedPrimitive vs UserPrimitive)。我已经尝试了各种Cull选项(是的,我实际上再次导出我的模型以尝试右手网格和翻转缠绕),混合选项等等。现在我完全没有想法......

哦,我也在使用最新的DirectX版本和NVidia版本:)

有什么建议吗?

1 个答案:

答案 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设备状态运行良好,但您必须在绘制之前将其设置为立即。当时我在游戏初始化部分设置了它。随后我开始使用多个渲染目标,并被迫更改两者之间的状态,并且删除着色器选项时不会出现绘图问题。