2012-02-15 4 views
1

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

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

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

enter image description here

Это все выглядит хорошо, однако, когда я загрузить его в XNA, деформация желудка имеет vanished-

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

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

Любые предложения были бы очень признательны.

Благодаря

ответ

3

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

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

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

+0

И, изучая этот образец, сосредоточьтесь на концепциях BlendWeight & BlendIndices, а не на аспект анимации образца. –

+0

ОК, замечательно, я уверен, что это поможет. Все равно имеет смысл! Я хорошо посмотрю и посмотрю, смогу ли я заставить его работать. Большое спасибо за помощь –