我正在尝试在XNA C#中创建一个Bone结构。
我试图通过与矩阵的亲子关系来实现这一点。当我旋转父母时,孩子应该以相同的方式旋转......
目前这种方法很好,但是当在骨头上执行IK例程时,一切都很疯狂。
有人可以查看我的代码吗?向量中的ID 0是父级,1是子级偏离父级的52个单位...
_boneList[0]._position = new Vector3(0, 0, 0);
_boneList[0]._localTransform = _boneList[0]._rotationTransform * Matrix.CreateTranslation(_boneList[0]._position);
_boneList[0]._globalTransform = _boneList[0]._localTransform;
_boneList[1]._position = new Vector3(0, 52, 0);
_boneList[1]._localTransform = _boneList[1]._rotationTransform * Matrix.CreateTranslation(_boneList[1]._position);
_boneList[1]._globalTransform = _boneList[1]._localTransform * _boneList[0]._globalTransform;
感谢您的帮助。
答案 0 :(得分:0)
对我来说看起来很好,你应该有其他问题,也许是角度?
这是我在2D中获取它的代码,您可以在行动here
中观看它 //------------------------------------------------------------------------------------
public void UpdateLocal( )
{
Vector2 traslation = Translator.GetValue();
float rotation = Rotator.GetValue();
Vector2 scale = Scalator.GetValue();
Matrix mTraslation, mRotation, mScale;
Matrix.CreateTranslation( traslation.X, traslation.Y, 0, out mTraslation );
Matrix.CreateRotationZ( rotation, out mRotation );
Matrix.CreateScale(scale.X, scale.Y, 1 , out mScale );
Matrix.Multiply( ref mScale, ref mRotation, out Local );
Matrix.Multiply( ref Local, ref mTraslation, out Local );
}
//---------------------------------------------------------------------------------
protected virtual void SpecialUpdateTransformTopToDown( )
{
UpdateLocal( );
if ( Parent != null )
{
Matrix.Multiply( ref Local, ref (Parent as BoneData).Absolute, out Absolute );
}
else
{
Absolute = Local;
}
foreach ( BoneData child in _children.OfType<BoneData>() )
{
child.SpecialUpdateTransformTopToDown( );
}
}