Problem with bones

IvanJ147

12-07-2012 15:13:58

Hi all,
in my project I have to draw a skeleton, and then I have to put some balls in the same position of the right ankle of skeleton.
I don't draw a skeleton (i have used skeletonentity.Visible = False).
The sequence of what I do is:
- i rotate manually the bones
- i do a procedure in order to make the skeleton attached to the ground
- i search the global position of the wrist ankle bone
- i draw the ball in the same coordinate

I make the skeleton to keep attached to the ground in this way:

Dim yMin As Single = 9999
Dim yTemp As Single
Dim v As Mogre.Vector3
For Each osso As Mogre.Bone In s.GetBoneIterator
If IsNothing(osso.Parent) Then
yTemp = osso.Position.y
Else
v = o.fcn_getPosizioneBone(skeletonentity, osso)
yTemp = v.y
End If
If yTemp < yMin Then yMin = yTemp
Next
s.GetBone("Root").Position = New Mogre.Vector3(s.GetBone("Root").InitialPosition.x, _
s.GetBone("Root").Position.y - yMin, s.GetBone("Root").InitialPosition.z)


I search the bone global position in this way:

Public Function fcn_getPosizioneBone(ent As Mogre.Entity, bone As Mogre.Bone) As Mogre.Vector3
Dim world_position As Mogre.Vector3 = bone._getDerivedPosition()
Dim pParentNode As Mogre.Node = ent.ParentNode
Dim pSceneNode As Mogre.SceneNode = ent.ParentSceneNode

While Not IsNothing(pParentNode)
If Not (pParentNode.Equals(pSceneNode)) Then
world_position = DirectCast(pParentNode, Mogre.TagPoint)._getFullLocalTransform() * world_position
pParentNode = DirectCast(pParentNode, Mogre.TagPoint).ParentEntity.ParentNode
Else
world_position = pParentNode._getFullTransform() * world_position
Exit While
End If
End While
Return world_position
End Function


And i update the skeleton position and orientation with a skeleton._updateTransforms()...
The problem is that everything works only if my root bone doesn't move... if I move it, the first ball is positioned in wrong position, and the second one in right position.
You can see in the video the example with still root bone (the 3D model you see is another instance, visible, of the skeleton):

http://youtu.be/7rEy3UpziA8

In this one you can instead see that if I move the root something goes wrong. The root bone is the pelvis.

http://youtu.be/-YDwug7AG-Y

Please help me!! What am I wrong???