3dsmax2012及び2013についてお聞きしたいと思います。
下図のような親子構造で、Box003の方向コンストレイントがかかっているBox002から親回転値を取得したいと思います。
通常の場合は in coordsys parent ($.rotation.x_rotation) とスクリプトを書けば、選択オブジェクトの親回転値を
取得できるとおもいます。実際Box003にこれを実行すると-25.0という値が返ってきます。
しかしBox002にこれを実行すると、Box004とBox001の回転値の影響を受けた-40.0という数値が帰ってきてしまいます。
Box002のトランスフォームパネルにはきちんと-25.0という親回転値が表示されるのですが、
表示と同じ値を取得するにはどのような書き方をすればよいでしょうか。
よろしくお願いします。
解決済! 解決策の投稿を見る。
この掲示板へ質問を投稿後、いくつかのフォーラムを探し、指針となるような以下のスレッドを見つけました。
http://area.autodesk.com/forum/autodesk-3ds-max/maxscript/does-quattoeuler24041-work/
http://forums.cgsociety.org/showthread.php?f=98&t=947428
とても興味深い内容だったのですが、未だに解決を得ることができておりません。
スレッド内で見つけた以下のスクリプト文をBox003とBox002に試してみました。
確かにBox003にはきちんと-25.0が返ってくるのですが、コンストレイントの掛かっているBox002には
coordsys parent ($.rotation.x_rotation)
-40.0
in coordsys gimbal $ . rotation . x_rotation
-40.0
quatToEuler $.rotation.controller.value
(eulerAngles -40 3.41588e-006 1.41563e-006)
quattoeuler2 $.rotation.controller.value
(eulerAngles -40 3.41588e-006 1.41563e-006)
と親の数値の影響がある値が返ってきてしまい、本来取得したい-25.0とならず、
コンストレイントのかかっているオブジェクトの数値を取得する方法については見つかりませんでした。
引き続き表題の件につきまして回答いただけないかとおもいます。
よろしくお願いします。
コンストレイントの掛かっているBox002から直接親回転値を取得する方法については未だに不明ですが、
A = $Box001.transform.rotation
B = $Box002.rotation.controller.Orientation_Constraint.rotation
quattoeuler (inverse A-B)
というように、取得したいオブジェクトの親子関係を使ってやることで取得できました。
この方法ですと、仮にAが他のオブジェクトに対してコンストレイントが掛かっていた場合でも
きちんと親回転値を取得できました。
一応やりたいことができましたので、これにてスレッドを閉じようと思います。
自己完結でスレッドを使ってしまいすみません。
ありがとうございました。