2012-02-08 4 views
1

私はXNA C#で骨構造を作成しようとしています。親子行列チェイン/オーダー階層

私はマトリックスとの親子関係でこれを達成しようとしています。私は親を回転させるとき、子供は同じ方法で回転する必要があります...

これはうまく動作しますが、骨に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

私にはうまく見えますが、アングルに別の問題があるはずですか?

この

は、アクションでそれを見ることができ、私のコードは、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(); 
     } 
    } 
関連する問題