Модель неправильно отображается в XNA

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

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

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

введите здесь описание изображения

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

введите здесь описание изображения

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

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

введите здесь описание изображения

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

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);

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

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

Спасибо


person Ewen Cluley    schedule 15.02.2012    source источник


Ответы (1)


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

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

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

person Steve H    schedule 15.02.2012
comment
Изучая этот образец, сосредоточьтесь на концепциях BlendWeight и BlendIndices, а не на аспекте анимации образца. - person Steve H; 16.02.2012
comment
Хорошо, замечательно, я уверен, что это очень поможет. В любом случае имеет смысл! Я хорошо посмотрю и посмотрю, смогу ли я заставить его работать. Большое спасибо за помощь - person Ewen Cluley; 20.02.2012