Использование шейдера 3D Studio Max DirectX в задаче XNA - PullRequest
0 голосов
/ 22 декабря 2009

ОБНОВЛЕНИЕ 2: Теперь кажется, что это скорее проблема моделирования, чем проблема программирования. Упс.

Я новичок в разработке XNA, и, несмотря на мой опыт работы с C #, я застрял на одном месте из-за двух дней.

Ситуация: я создал модель в 3D Studio Max 2010, в которой используются два материала, оба из которых имеют тип DirectX Shader. Модель экспортируется в 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();
    }

Единственное, что происходит, - это появление белой рамки, покрывающей нижнюю половину экрана, независимо от положения камеры или угла наклона. Я получил имя параметров эффекта файла default.fx, указанного в Max (он находится в [программные файлы] \ autodesk \ 3ds Max 2010 \ maps \ fx).

У меня такое чувство, что я устанавливаю один или все из них неправильно. Я пытался найти учебные пособия и следовать их коду, однако ни одна из них не работает для моей модели.

Любая помощь или идеи?

UPDATE: Сделав эти изменения:

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

Модель умела рисовать. Тем не менее, все полностью белое: (

1 Ответ

1 голос
/ 22 декабря 2009

К сожалению, особенно если вы не видите свой шейдер и / или не знаете, что это за ошибка, которую вы получаете, будет довольно сложно понять, что здесь не так. Есть ряд вещей, которые могут пойти не так.

Мое предложение - начать с более простого теста. Создайте коробку, примените очень простой шейдер ... и сделайте это. Затем добавьте некоторый параметр, который (например) умножает красный компонент пиксельного шейдера на передаваемую величину. И сделайте так, чтобы он успешно отображался.

Упрощая набор задач, вы выясняете нюансы шейдеров, которые максимально экспортируют, и то, как вы устанавливаете свойства. В какой-то момент вы поймете, что делаете неправильно, и сможете применить это к более сложному шейдеру.

Мне очень интересно услышать, как это происходит ... Обязательно прокомментируйте это, как только вы исправите это, чтобы я мог видеть результат. Удачи! : -)

...