2012-01-27 4 views
2

「互いに結合された」直方体の2つのソート(たとえば、2つの例では、実際にはn> 1)それらの隣接する面上の頂点はメモリ内の同じ頂点である。それで、2つの木製ブロックのように、1つは、底に4つの頂点、2つの間で共有されている中央に4つ、上部に4つの頂点で、積み重ねられます。今、私は最初に、それらの4つの共有頂点の中心点を持つヒンジ上にあるかのように、 "トップ"木ブロック上で特定の回転を行うことができるようにしたいと思います。従属する添付オブジェクトのチェーン上で回転変換を実行する最速の方法

肘のように、特定の角度で45度までしか曲げることができないとし、回転を実行するには、その不可視のヒンジの中心点の周りにオブジェクトを構成する8つの頂点を回転させます。このプロセスでは、他のブロックの4つの共有頂点が幾分移動しますが、ヒンジはそれらの中心点であるため、ボトムブロックから「平行移動」しません。私はそれらを木製と呼ぶのは、特定の方法で変形するので直観的ではないが、私はそれを視覚化するように設定しようとしていた。とにかく、このボトムブロックを別の方法で回転できるようにしたいが、トップブロックが取り付けられているように動作させたいとしましょう。したがって、下のブロックが動くと、上のブロックはそのブロックと共に回りますが、でものヒンジにはどのような屈曲もあります。

私は軸の角度または四元数を使って段階的に変換を行うことを検討していましたが、「最上位」のブロックから始まり、依存関係のチェーンを下ろして現在のブロックと、それ。しかし、これは、現在のヒンジを原点とするために、すべての頂点をオフセットすることを邪魔することを必要とし、このチェーンの各ステップについて、回転を行い、前のオフセットを逆転させる。これを処理するより効率的な方法はありますか?私はスピードの効率を意味し、メモリ内の余分な前処理されたデータを持つことは大したことではありません。このような線形の依存関係を持つことを期待できない時が来ているかもしれません(トップブロックがおそらくリングを形成するためにボトムブロックに結びつくようになります)。これらの可能性のためにこれを処理する適切な方法は何でしょうか?

答えて

0

あなたは基本的に「ゼリー」の長いピースのようなものがほしいと思っています。すなわち、ブロック/プリズムの上部が動くと、残りの部分には二次的な動きがあります。ブロック/プリズムチェーン、チェーンやいくつかの柔らかいボディを動かすような仕方で、チェーンやリングを構成する残りのセグメントに二次的な動きを作り出すようなものです。

この場合、実際にプリズムの各始点と終点を構成する4頂点の中心点で各ボーンセグメントが始まり、終わるいくつかの「ボーン」を構築することをお勧めします/ブロック。次に、ボーンチェーンの1つのセグメントを移動するとき、チェーン内の他のボーンが移動されたボーンに対してどれだけ移動するかを計算できます。そこから、プリズム/ブロック内の残りの頂点をこの中央の「ボーン」に対して重み付けして、ボーンの移動に応じて適切な量だけ移動させることができます。 1つの「骨」に付けられた頂点を別の骨セグメントに対して平均化して、結合した頂点の重さに落ちるようにして、各頂点であまりにも多くのピンチで終わると、よりスムーズな動きを作成することもできます"ジョイント"。

骨に重点を置いた頂点を持つボーンを使用すると、計算に必要な回転変換の数が減ります。骨関節の動きだけが重い持ち上げ計算を必要とする...頂点自体は、チェーン内の骨の位置から単純に補間される。

+0

実際には、チェーンの残りの部分を通って1つの動きを自然な形で伝播することではありません。私はちょうど依存関係の連鎖の下でヒンジ回転の蓄積を伝播するより速い方法があるかどうか疑問に思っていました。それは肩で腕を上げることから始まります。肘は30度曲がり、手首は20度曲がります。手首のヒンジの手の上で軸の角度/四元数の回転を最初に行うよりも速い方法がありますか?次に、肘のヒンジのための全体的な下の腕/手の上、そして肩の上腕/下の腕/手 – user173342

+0

フォワードキネマティックス(あなたが何を記述しているか、最初に子を変換してから親を変換する)が最速の方法になります。そうではありません。ただし、「ボーン」システムを使用することについては、各頂点にすべての変換を適用する必要はありません。骨は複雑な回転行列を得る唯一のものであり、頂点は骨の新しい位置からちょうど補間されます。 – Jason

+0

ああ、元々は頂点を生成すること以外は、あなたが描いているようなものを「骨」として表現していました。これは、その後、うまくいくはずです! – user173342

0

- 相対的な翻訳で定義された「骨」の要素(のチェーンを使用して:剛体リンクについてこの質問を見て/回転関係)、骨に基づいて線形補間を実行して「スキン」頂点の位置を決定するオプションがあります。ポーズを完全に定義するには、各ジョイントの回転角度を決定する必要があります。

各ジョイントの回転を定義することができなくなるため、他のすべて。この問題を解決するには、すべての制約を含む物理シミュレーションまたは他のソルバを設定します。正確に何をするかは、オブジェクトをどのように操作する必要があるかによって異なります。ゲームエンジンの場合は物理的なシミュレーションが理にかなっていますが、手アニメーションの場合は半自動リギングの可能性がありますキーワード:逆運動学)。