平面の位置を 3 ポイント ヘルパーに合わせておく方法
質問:
3 次元空間を定義している 3 ポイント ヘルパーがあり、それらすべてをランダムにアニメートしました。
平面オブジェクトを、常にポイントで定義された平面に正確に向けておく方法はありますか。
回答:
この場合には、変換スクリプト コントローラが向いています。 変換スクリプト コントローラでは平面の回転 (方向) と位置の両方をコントロールできるためです。
以下のスクリプトは、次の処理を行います。
ポイントを移動またはアニメートする場合、平面が伴います。
スクリプト:
|
--Create a plane and 3 point helper
thePlane = Plane()
p1 = point pos:[40,-10,30]
p2 = point pos:[20,30,40]
p3 = point pos:[-10,-20,30]
--Create a Transform Script and assign it to the Plane
ctrl = transform_script()
thePlane.transform.controller = ctrl
--Create three Node variables and assign the Helpers to them
ctrl.addNode"p1" p1
ctrl.addNode"p2" p2
ctrl.addNode"p3" p3
--We create a variable to hold the expression
--We calculate the vector from Point01 to Point02
txt ="v1 = normalize (p2.pos-p1.pos)\n"
--and the vector from Point01 to Point03
txt +="v2 = normalize (p3.pos-p1.pos)\n"
--The cross productof the two vectors is the normal to the plane
txt +="nv1 = normalize (cross v1 v2)\n"
--Thecross product ofthenormal and vector 1gives us a third axis
txt +="nv2=normalize(cross nv1 v1)\n"
--We create a matrix3 value using he first vector,
--and the two cross products which are all orthogonal to each-other.
--The translation part .row4 is the middle point
--of the 3 points' positions:
txt +="matrix3 v1 nv2 nv1 ((p1.pos+p2.pos+p3.pos)/3)"
--Assign the expression to the script controller
ctrl.setExpression txt
|