XNA- Transforming children
- by user1806687
So, I have a Model stored in MyModel, that is made from three meshes. If you loop thrue MyModel.Meshes the first two are children of the third one. And was just wondering, if anyone could tell me where is the problem with my code.
This method is called whenever I want to programmaticly change the position of a whole model:
public void ChangePosition(Vector3 newPos)
{
Position = newPos;
MyModel.Root.Transform = Matrix.CreateScale(VectorMathHelper.VectorMath(CurrentSize, DefaultSize, '/')) * Matrix.CreateFromAxisAngle(MyModel.Root.Transform.Up, MathHelper.ToRadians(Rotation.Y)) *
Matrix.CreateFromAxisAngle(MyModel.Root.Transform.Right, MathHelper.ToRadians(Rotation.X)) * Matrix.CreateFromAxisAngle(MyModel.Root.Transform.Forward, MathHelper.ToRadians(Rotation.Z)) *
Matrix.CreateTranslation(Position);
Matrix[] transforms = new Matrix[MyModel.Bones.Count];
MyModel.CopyAbsoluteBoneTransformsTo(transforms);
int count = transforms.Length - 1;
foreach (ModelMesh mesh in MyModel.Meshes)
{
mesh.ParentBone.Transform = transforms[count];
count--;
}
}
This is the draw method:
foreach (ModelMesh mesh in MyModel.Meshes)
{
foreach (BasicEffect effect in mesh.Effects)
{
effect.View = camera.view;
effect.Projection = camera.projection;
effect.World = mesh.ParentBone.Transform;
effect.EnableDefaultLighting();
}
mesh.Draw();
}
The thing is when I call ChangePosition() the first time everything works perfectlly, but as soon as I call it again and again. The first two meshes(children meshes) start to move away from the parent mesh.
Another thing I wanted to ask, if I change the scale/rotation/position of a children mesh, and then do CopyAbsoluteBoneTransforms() will children meshes be positioned properlly(at the proper distance) or would achieving that require more math/methods?
Thanks in advance