Проблемы с отрисовкой моделей XNA FBX, это либо мой код, либо способ экспорта моделей, либо способ экспорта контента - PullRequest
0 голосов
/ 26 марта 2011

Таким образом, в основном, когда я пытаюсь нарисовать больше меша внутри файла FBX, его ориентация всегда удаляется и уменьшается.Я не уверен, вызвана ли проблема кодом или тем, как я экспортирую файлы FBX.Я пытался сузить причину, и я вполне уверен, что это не связано с тем, как я экспортирую FBX (но я могу ошибаться), так что это либо конвейер содержимого XNA, либо мой код рисования

ЗдесьВот некоторые фотографии, которые я сделал, чтобы показать мою проблему, где серый фон в 3Ds Max, как я его вижу, и красный фон в XNA:

Вот как это выглядит в 3D StudioMax: http://i.stack.imgur.com/e0oW4.png

Вот как это выглядит в XNA: http://i.stack.imgur.com/1vOcx.png

И то, и другое рассматривается с одного и того же угла и направления, но с разных расстояний.

Что действительно странно, если я создаю другоеМаксимальная сетка, скажем, прямоугольник, и экспортируйте его (вместе с исходной моделью), он работает нормально: http://i.stack.imgur.com/SIDg9.png

Пока в модели fbx есть более одной сетки, она рисует правильно (хотяЯ все еще подозреваю, если он рисует с соответствующим масштабированием, то есть, если в Max он равен 1 единице в XNA, то становится примерно 1,27 единиц в длину), если его ориентация меньше, чем я применил к нему в 3D studio, то maxудаляется при рисовании.

Вот как я рисую модель:

model.CopyAbsoluteBoneTransformsTo(boneTransforms);
foreach (ModelMesh mesh in model.Meshes)
{
foreach (BasicEffect effect in mesh.Effects)
{
effect.World = boneTransforms[mesh.ParentBone.Index];
Vector3 cameraPosition = Camera.Get.Position;// new Vector3(0, 0, 0);
//cameraPosition.X = -Camera.Get.PosX;
//cameraPosition.Y = Camera.Get.PosY;
effect.View = Camera.Get.View;// Matrix.CreateLookAt(cameraPosition, cameraPosition + Camera.Get.LookDir, Camera.Get.Up);

effect.Projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4,
BaseGame.Get.GraphicsDevice.Viewport.AspectRatio,
0.01f, 1000000); //Matrix.CreateOrthographic(800 / 1, 480 / 1, 0, 1000000);

//effect.TextureEnabled = true;
effect.LightingEnabled = true;
effect.PreferPerPixelLighting = true;
//effect.SpecularColor = new Vector3(1, 0, 0);
}

mesh.Draw();
}

Очевидно, что mesh.draw () вызывается дважды, когда в файле fbx больше одной сетки..

1 Ответ

1 голос
/ 29 марта 2011

Как правило, если у вас возникают проблемы с положением или масштабом меша при рендеринге, это может быть связано с матрицами. Не обязательно экспорт, а скорее как вы используете их в коде.

Я использую blender3d для моделирования, но я знаю, что Blender3d фактически определяет разные пространства при создании сеток в редакторе. Например, если вы создаете сетку в режиме «объект», положение / вращение / масштаб объекта в сцене не будут экспортированы (поскольку этот объект будет корнем нового дерева с центром около 0,0, 0). Поэтому я бы проверил аналогичную ситуацию в 3DMax - убедитесь, что вы преобразуете вершины в Max относительно 0,0,0, иначе вы можете потерять «первоначальный» перевод, и при рендеринге в XNA все объекты будут отображается вокруг ваших 0,0,0 (то есть кажется смешанным).

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

...