2016-07-29 11 views
0

私は顔検出アプリを持っており、検出された顔の姿勢に従ってキャラクターの頭を回転させたい。ユニティのクォータニオンと同期してリグのキャラクターの頭を回転させる

私は検出された顔の回転を四元数の形で取得できましたが、四元数のデータを四元数の基準点の3D点にどのように変換するのかは分かりません。私が信じている装備されたキャラクターは、ローテーションを決定するでしょう。

のは、私はこの文字があるとしましょう:http://i.imgur.com/3pcRoYx.png

一つの解決策はただ頭を切断し、それを独自のオブジェクトを作成し、その後、四元数に応じて、そのオブジェクトの回転を設定することであろうが、私はしないでくださいそれが欲しい。私は無傷のキャラクターが欲しい。

クォータニオンのデータを使ってヘッド内の参照点を移動することはできますか?あるいは、私はそれが間違っていたキャラクターが彼らの頭を回す方法を間違っている?私は前にアニメーション化していない。

答えて

1

1つのボーンにローテーションを適用できます。あなたのスクリプトでその骨を手に入れてください。あなたのクラスでは、最後のクォータニオンをすべての更新に格納し、それをそのクラスと比較し、別のクォータニオンで更新するようvarを保持します。私はここに実際のエディタを持っていませんが、このpsuedocodeを試してみてください。

class NeckRotator { 
    public GameObject Neck; 
    private Quaternion LastFace; 


    void Start(){ 
     LastFace = Neck.transform.Rotation; 
    } 

    void Update(){ 
     var DetectedFace = ... // Whatever you do to get this 
     var Change = Quaternion.Inverse(DetectedFace) * LastFace; // Found this online real quick 
     Neck.Rotate(Change); 
     LastFace = Neck.transform.Rotation; 
    } 
} 

NPCの首を回転させてプレイヤーを見る前に、これまでのようなことをしました。あなたの取り引きにも有効です。

+0

待ち、aとbは何であるはずですか? – Johan

+0

私の悪いです。 DetectedFaceとLastFaceです。それは反対かもしれませんが。また、LastFaceは最終更新時の首の四元数でなければなりません。私はあなたがこれのような何かを得ると思う? – Ozitiho

+0

逆数を計算する必要はありませんでした。私はちょうど私が持っていた四元数で骨の回転を設定することができます。ありがとう。 – Johan