[英]Parent-Child Matrix Chaining/Order Hierarchy
我正在嘗試在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;
感謝您的幫助。
在我看來,您應該還有其他問題,也許是角度問題?
這是我在2D模式下達到的代碼,您可以在此處觀看實際操作
//------------------------------------------------------------------------------------
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( );
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.