0

更新 2:现在看来,这更像是一个建模问题而不是编程问题。哎呀。

我是 XNA 开发的新手,尽管我有 C# 经验,但我已经被困在一个地方两天了。

情况:我在 3D Studio Max 2010 中创建了一个模型,它使用两种材质,都是 DirectX 着色器类型。模型无错误地导出到 FBX,Visual Studio 可以正确编译它。当我最初运行 Draw() 方法时,它在我的一个循环的“BasicEffect”部分引发了异常,表明(至少对我而言)它正在正确加载 .fx 文件,该文件必须嵌入到 FBX文件什么的。

问题:使用以下代码时

    foreach (ModelMesh mesh in map.Meshes)
    {
        foreach (Effect effect in mesh.Effects)
        {
            effect.CurrentTechnique = effect.Techniques["DefaultTechnique"];
            effect.Begin();
            effect.Parameters["World"].SetValue(Matrix.CreateTranslation(Vector3.Zero));
            effect.Parameters["View"].SetValue(ActiveCamera.ViewMatrix);
            effect.Parameters["Projection"].SetValue(ActiveCamera.ProjectionMatrix);
            effect.Parameters["WorldViewProj"].SetValue(Matrix.Identity * ActiveCamera.ProjectionMatrix);
            effect.Parameters["WorldView"].SetValue(Matrix.Identity * ActiveCamera.ViewMatrix);

            foreach (EffectPass ep in effect.CurrentTechnique.Passes)
            {
                ep.Begin();
                // something goes here?
                ep.End();
            }

            effect.End();
        }

        mesh.Draw();
    }

唯一发生的事情是出现一个覆盖屏幕下半部分的白框,无论相机位置或角度如何。我得到了在 Max 中指定的 default.fx 文件的效果参数的名称(它位于 [program files]\autodesk\3ds Max 2010\maps\fx)。

我觉得我错误地设置了其中一个或所有这些。我试图查找教程并遵循他们的代码,但似乎没有一个适用于我的模型。

有什么帮助或想法吗?

更新: 通过进行这些更改:

    effect.Parameters["WorldViewProj"].SetValue(Matrix.CreateTranslation(Vector3.Zero) * ActiveCamera.ViewMatrix * Conductor.ActiveCamera.ProjectionMatrix);
effect.Parameters["WorldView"].SetValue(Matrix.CreateTranslation(Vector3.Zero) * ActiveCamera.ViewMatrix);

该模型能够绘制。然而,一切都是白色的:(

4

1 回答 1

1

不幸的是,尤其是在没有看到你的着色器和/或不知道你得到什么错误的情况下,很难弄清楚这里出了什么问题。有很多事情可能会出错。

我的建议是从一个更简单的测试开始。制作一个盒子,应用一个非常简单的着色器……然后进行渲染。然后,添加一些参数,(例如)将像素着色器的红色分量乘以传入的数量。并使渲染成功。

通过简化问题集,您可以了解最大导出的着色器的细微差别以及如何设置属性。在某些时候,您会意识到自己做错了什么,并且能够将其应用于更复杂的着色器。

我很想知道这是怎么回事……请确保在修复后对此发表评论,以便我看到结果。祝你好运!:-)

于 2009-12-22T15:34:08.853 回答