0

Heya私は現在、学位最終年度プロジェクトに取り組んでいます。これは、2つのパートA)優れた3Dエンジンの作成、およびB)その中でIKシステムを実装し、いくつかのタイプのIK解決を評価します。CCD(Cyclic-Coordinate Descent)は私が始めたところであり、問​​題にぶつかりました。私は多くのソースを使用してIKを理解しようとしました。特に、CCDに関しては、ここで入手可能なベースとしてソースコードを使用しました:http ://www.darwin3d.com/gdm1998.htm

ソースコードを投稿する前に、私の問題が、誰かが以前に遭遇したことのある明白または単純なものであることを望んでいます。これが問題を示す短いビデオです:http ://www.youtube.com/watch?v = XtU8rFR-DuE

明らかにそれは正しくありません、IKはスピンオフし、一般的に多くの混乱を招くようです!ターゲットが静止している場合、それはうまく収束しますが、最小の動き(ターゲットが私のエンジンのIRベースのモーションキャプチャによって駆動されるため、このシステムで多く発生します)でさえ、再計算して再び回転を開始するようです。

また、ジョイントが範囲外にある場合、CCDテクニックに従って、ジョイントはすべてターゲットを指し、ループ制限に達すると想定しますが、IKの照準は正しい方法で維持されますが、ビデオで明らかです。ターゲットが範囲外にある場合、IKは再び座って繰り返し回転します。

誰かが助けることができれば私は本当にそうするでしょう!感謝します。さらに情報(コードなど)が必要な場合は、お気軽にお問い合わせください。

よろしくお願いしますクリス

4

1 に答える 1

0

多くのことが間違っている可能性があります。プログラムをデバッグする必要があります。

各ジョイントについて:

  1. targetターゲット位置とエンドエフェクタ位置を取得しendます。
  2. qジョイントの変換を知って、新しいジョイント値を計算します。
  3. endNew新しいジョイント値 のエンド エフェクタ位置を計算しますq

からまでの距離がからendまでtargetの距離より小さい場合は、バグが見つかりました (すべての回転が間違っています)。バグは2. の選択、または 1. と 3. のエンドエフェクタ位置の計算にあります。endNewtargetq

他の人のランダムなサンプル コード (または自分のコード) を使用するのは気が進まないでしょう。たとえば、ランダーは書き込みます

CrossProduct(&curVector, &targetVector, &crossResult);
NormalizeVector(&crossResult);

しかし、これがゼロ除算でクラッシュしないと確信していますか (たとえば、 if curVector = -targetVector)?

ジョイントが回転している場合 (Lander の例のように球形ではない場合)、数学については Lander の参考文献の Wang & Chen を参照してください。

于 2011-03-10T01:43:59.997 に答える