Модель не отображается правильно в XNA - PullRequest
1 голос
/ 15 февраля 2012

Модель не отображается правильно в XNA, игнорирует некоторые деформации кости Ответить Цитировать Редактировать Я очень плохо знаком с 3D-моделированием, однако мне нужно сделать кое-что для проекта, который я предпринял.

Основной принцип заключается в том, что мне нужна человеческая модель, которая может быть деформирована под измерения пользователей (измеренные с помощью Kinect, но это уже другая история!). Например, я хочу растянуть область живота для крупных пользователей и т. Д.

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

enter image description here

Все это выглядит хорошо, но когда я загружаю его в XNA, деформация желудка исчезает -

enter image description here

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

Кроме того, когда я просматриваю экспортированный FBX в плагине для просмотра FBX для QuickTime, деформации отображаются абсолютно нормально.

enter image description here

Код для отображения модели (ее код F #, преобразованный из примера c #, однако я попробовал его с исходным кодом c # и получил те же результаты):

override this.Draw(gameTime)=
            // Copy any parent transforms.
            let (transforms:Matrix array) = Array.zeroCreate model.Bones.Count
            model.CopyAbsoluteBoneTransformsTo(transforms);
            this.Game.GraphicsDevice.BlendState <- BlendState.Opaque
            this.Game.GraphicsDevice.DepthStencilState <- DepthStencilState.Default
            // Draw the model. A model can have multiple meshes, so loop.
            for mesh in model.Meshes do
                // This is where the mesh orientation is set, as well 
                // as our camera and projection.
                for e:Effect in mesh.Effects do
                    let effect = e :?> BasicEffect
                    effect.EnableDefaultLighting()
                    effect.World <- mesh.ParentBone.Transform *
                        Matrix.CreateRotationZ(modelRotation)
                        * Matrix.CreateTranslation(modelPosition)
                    effect.View <- Matrix.CreateLookAt(cameraPosition, 
                        focusPoint, Vector3.Up)
                    effect.Projection <- Matrix.CreatePerspectiveFieldOfView(
                        MathHelper.ToRadians(45.0f), aspectRatio, 
                        1.0f, 10000.0f)
                // Draw the mesh, using the effects set above.
                mesh.Draw();
            base.Draw(gameTime);

Интересно, есть ли у кого-нибудь идеи относительно того, что пошло не так или какие-либо идеи о том, как это отсортировать?

Любые предложения приветствуются.

Спасибо

1 Ответ

3 голосов
/ 16 февраля 2012

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

Посмотрите на образец модели Skinned на концентраторе приложения: http://create.msdn.com/en-US/education/catalog/sample/skinned_model

Все суставы (локти, колени и т. Д.) Немного изменяются как суставыпрогибается.В конечном итоге вы хотите, чтобы на одну вершину влияло более одного преобразования.

...