Таким образом, в основном, когда я пытаюсь нарисовать больше меша внутри файла 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 больше одной сетки..