Импорт модели XNA - все сетки отображаются друг над другом - PullRequest
0 голосов
/ 19 января 2012

Я создал сцену в 3DS Max со стандартной моделью двигателя и некоторыми вещами, которые добавил к себе, плоскости и кнопке.

http://i.stack.imgur.com/R2iva.png

Независимо от того, как яэкспортируйте сцену, будь то в формате .X, используя экспортер panda, или .fbx, используя экспортер fbx 2012.2, оба, при загрузке в XNA и рендеринге, все появляются друг над другом.

http://i.stack.imgur.com/6gdMb.png

Поскольку отдельные части двигателя все остаются там, где они должны (и разделены в 3ds max), я уверен, что в 3ds max есть что-то, что я неправильно настраиваю смакет остальных моих объектов.

Обновление 1: код, который я использую для загрузки моделей в xna, выглядит следующим образом

        Matrix[] transforms = new Matrix[model.Bones.Count];
        model.CopyAbsoluteBoneTransformsTo(transforms);

        foreach (ModelMesh mesh in model.Meshes)
        {
            foreach (BasicEffect be in mesh.Effects)
            {
                be.EnableDefaultLighting();
                be.Projection = camera.projection;
                be.View = camera.view;
                be.World = GetWorld() * mesh.ParentBone.Transform;
                // adding the additional * transforms[i]; didnt do anything  

            }
            mesh.Draw();
        }

Этот код отлично работает для моделей других людей, но не для любыхчто я делаю.Это как 3ds Max не экспортирует позиции объектов, которые я создаю в сцене относительно происхождения сцены.

1 Ответ

1 голос
/ 19 января 2012

Вам нужно объединить все матрицы преобразования из родительских и дочерних костей следующим образом:

Matrix[] transforms = new Matrix[model.Bones.Count];
model.CopyAbsoluteBoneTransformsTo(transforms);

foreach (ModelMesh mesh in model.Meshes) {
    foreach (BasicEffect ef in mesh.Effects) {
        ef.World = transforms[mesh.ParentBone.Index];
        //Also do other stuff here, set projection and view matrices
    }
}

Возможно, есть лучший способ, но этот код должен работать.

...