![見出し画像](https://assets.st-note.com/production/uploads/images/6087508/rectangle_large_468ec2d6e38fd308b7ba36a44dd89166.jpg?width=1200)
Creative Coding Drill vol.2
※この記事はtkmh.me上で掲載している記事 (2016.02.23 掲載) を転載、加筆・修正したものです。
---------
Creative Coding Drill 第二回はインバースキネマティクスについて。
インバースキネマティクスとは、関節のように連結されたオブジェクトを動かす仕組みで、連結されたオブジェクトの先端の位置が決まると、上位の連結部分の回転角度や位置が決定されます。
(今回のデモの画面を収録したものも、ちょっと動きが重いです。。)
3Dで実現するため、回転角度の制御はクオータニオンを使用しているのですが、openFrameworksではofQuaternionクラスのgetEulerメソッドに不具合があるようで、以下の記事を参考にさせていただきました。
先頭のオブジェクトを円運動させ、それにつながったオブジェクトが追随するような動きになってます。(さらに円運動の軸も回転させているので立体的に回転します)
マウス位置によって円運動の半径を変えているので、替えた瞬間に先頭のオブジェクトが向きを変える様子がわかります。そして先頭のオブジェクトに追随するような動きが実現できました。
ただ、↑の動画ではちょっとわかりにくいのですが、不定期にオブジェクトがズビズビっと揺れるというか明らかにおかしい挙動をする時があります。インバースキネマティクスには「フリップ」と呼ばれる現象があるようで、たぶんそれなんじゃないかなと思います。回転角度を決めるための計算結果が複数ある場合に発生しているようです。改善できるかどうかはわかりません。。
ソースコードは以下のリンクから。
いいなと思ったら応援しよう!
![Takumi HASEGAWA (unshift Inc.)](https://assets.st-note.com/production/uploads/images/68933680/profile_d6402d097e6560ec8427f01c83c7bf3a.png?width=600&crop=1:1,smart)