ОБНОВЛЕНИЕ 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 (он находится в папке [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);
Модель умела рисовать. Однако все совершенно белое :(