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