0

更新 2:これは、プログラミングの問題というよりもモデリングの問題のようです。おっと。

私は XNA 開発に不慣れで、C# の経験があるにもかかわらず、2 日間にわたって 1 つの場所で立ち往生しています。

状況: 3D Studio Max 2010 で 2 つのマテリアルを使用するモデルを作成しました。どちらも DirectX Shader タイプです。モデルはエラーなしで FBX にエクスポートされ、Visual Studio は正しくコンパイルします。最初に Draw() メソッドを実行すると、ループの 1 つの「BasicEffect」部分で例外がスローされ、FBX に埋め込む必要がある .fx ファイルが正しくロードされていることが (少なくとも私には) 示されました。ファイルか何か。

問題: 次のコードを使用する場合

    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 ファイルのエフェクト パラメータの名前を取得しました ([プログラム ファイル]\autodesk\3ds Max 2010\maps\fx にあります)。

これらの 1 つまたはすべてを間違って設定しているように感じます。チュートリアルを調べてコードに従おうとしましたが、私のモデルではうまくいかないようです。

助けやアイデアはありますか?

更新: これらの変更を行うことにより:

    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 に答える