2011-06-27 7 views
7

私のOpenGLの研究(OpenGLレッドブック、私は思う)では、「上腕」、「下腕」、「手」で構成された関節運動ロボットアームのモデルの例を見てきました。 、および5つ以上の「指」を含む。各セクションは独立して動くことができなければならないが、「ジョイント」(上下の「アーム」は常に「エルボー」に接続されている)によって制約されていなければならない。最新のOpenGL質問

即時モード(glBegin/glEnd)では、「メンバ」と呼ばれるキューブの1つのメッシュを使用し、腕、手などの各部分に対してこの単一のメッシュの縮尺付きコピーを使用します。肩、肘、手首、ナックルの各関節の変換マトリックススタックに回転を押し込むことで達成されました。

これで問題は解決しましたが、古い非推奨の即時モードが使用されているため、最新のOpenGLコンテキストではこの問題の解決策はまだ分かりません。私の質問は、現代のOpenGLを使ってこの問題にアプローチする方法です。特に、マトリックススタックはもはや正式なものではないので、個々の「メンバー」はそれ自身の現在の変換マトリックスを把握する必要がありますか?

答えて

3

かなりです。本当に必要な場合は、独自のスタック型インターフェイスを実装するのは簡単です。文字通りスタックを格納してから、必要な行列演算を任意の数式ライブラリを使用して実装し、スタックの一番上の要素を使用して目的の行列の均一化を初期化する何らかの方法があります。

ロボットアームの例では、リンケージが各ボディ間に相対的な変換が指定された状態で、ツリー(または必要であればグラフ)として表されているとします。ロボットアームを描画するには、このデータ構造を走査して、それ自身で構成された親ボディの変形となる子ボディの変形を設定します。例:

1

ジョイントで接続されたリジッドパーツの場合、通常、各パーツを個々のサブメッシュとして扱い、描画する前に適切なマトリックスをロードします。

"接続された"/"連続"メッシュの場合、顔のように、通常、アニメーションは骨や変形ターゲットによって行われます。それらのそれぞれは変形を定義し、メッシュ内のすべての頂点にはウェイトが割り当てられ、各デフォーマの影響を強く受けます。技術的には、これは剛性の四肢モデルにも適用することができ、各手足に単一の変形器を非ゼロ重み付けする。

どのような適切なアニメーションシステムでも、変換(マトリックス)自体を追跡することはできますが、OpenGLマトリックススタック関数は、(OpenGLが発明されて以来)重大なアプリケーションではめったに使用されません。しかし、通常、変換は階層に格納されます。

1

これは、一般に、シーングラフを使用してOpenGLを超えるレベルで行います。

シーングラフツリーの各ノードで同じ行列変換を行うだけで、単にOpenGL行列にマップされるので、かなり効率的です。