У меня есть модель, у которой есть кость, которая имеет смещенное смещение от родительской кости (она не расположена в хвостовой части родительской кости). В Blender, где была сделана модель, я могу вращать кость и видеть, что прикрепленная сетка вращается правильно. Однако, когда я пытаюсь повернуть кость в моем коде, кажется, что она вращается вокруг хвоста родителя. Я что-то напутал в математике Матрицы (мой злейший враг).
Обновление:
protected override void Update(GameTime gameTime)
{
bone.Transform = Matrix.CreateFromYawPitchRoll(0f, 0.5f, 0f);
base.Update(gameTime);
}
Довольно стандартно, но если это имеет значение, Draw:
private void DrawModel(Model model, GraphicsDevice graphics, Matrix viewMatrix, Matrix projectionMatrix)
{
Matrix[] boneTransforms = new Matrix[model.Bones.Count];
model.CopyAbsoluteBoneTransformsTo(boneTransforms);
Matrix worldMatrix = orientation * Matrix.CreateTranslation(position);
foreach (ModelMesh mesh in model.Meshes)
{
foreach (BasicEffect effect in mesh.Effects)
{
effect.World = boneTransforms[mesh.ParentBone.Index] * worldMatrix;
effect.View = viewMatrix;
effect.Projection = projectionMatrix;
effect.EnableDefaultLighting();
effect.PreferPerPixelLighting = true;
// Set the fog to match the black background color
effect.FogEnabled = true;
effect.FogColor = Vector3.Zero;
effect.FogStart = 1000;
effect.FogEnd = 3200;
}
mesh.Draw();
}
}
Вот скриншоты, чтобы показать проблему
http://s1231.photobucket.com/albums/ee516/Neovivacity/?action=view¤t=boneRotation.png