平面の位置を 3 ポイント ヘルパーに合わせておく方法
 
 
 

MAXScript に関する質問と回答 > アニメーションの操作 > 平面の位置を 3 ポイント ヘルパーに合わせておく方法

質問:

3 次元空間を定義している 3 ポイント ヘルパーがあり、それらすべてをランダムにアニメートしました。

平面オブジェクトを、常にポイントで定義された平面に正確に向けておく方法はありますか。

回答:

この場合には、変換スクリプト コントローラが向いています。 変換スクリプト コントローラでは平面の回転 (方向) と位置の両方を制御できるためです。

以下のスクリプトは、次の処理を行います。

ポイントを移動またはアニメートする場合、平面が伴います。

スクリプト:

-- 平面と 3 ポイント ヘルパーを作成します。
thePlane = Plane()
p1 = point pos:[40,-10,30]
p2 = point pos:[20,30,40]
p3 = point pos:[-10,-20,30]
-- 変換スクリプトを作成し、平面に割り当てます。
ctrl = transform_script()
thePlane.transform.controller = ctrl
-- 3 つのノード変数を作成し、これらにヘルパーを割り当てます。
ctrl.addNode"p1" p1
ctrl.addNode"p2" p2
ctrl.addNode"p3" p3
-- 式を格納するための変数を作成します。
-- Point01 から Point02 へのベクトルを計算します。
txt ="v1 = normalize (p2.pos-p1.pos)\n"
-- Point01 から Point03 へのベクトルを計算します。
txt +="v2 = normalize (p3.pos-p1.pos)\n"
-- 2 つのベクトルの乗積は、平面に対する法線です。
txt +="nv1 = normalize (cross v1 v2)\n"
-- 法線とベクトル 1 の乗積から 3 番目の軸が求められます。
txt +="nv2=normalize(cross nv1 v1)\n"
-- 1 つ目のベクトルと、すべて互いに直交する
-- 2 つの乗積を使用して matrix3 値を作成します。
-- 変換部分 (.row4) は、次の 3 ポイントの位置の
-- 中央のポイントになります:
txt +="matrix3 v1 nv2 nv1 ((p1.pos+p2.pos+p3.pos)/3)"
-- 式をスクリプト コントローラに割り当てます。
ctrl.setExpression txt
関連事項