ソラマメブログ › 鳥頭の雑記帳 › 2010年06月

  

Posted by at

2010年06月04日

回転座標の算出方法




オブジェクトRezをスクリプトで書くときに、あらかじめ座標設定しておいても、
本体を回転させてしまうと、本体との位置関係が狂ってしまいます。

で、本体が回転したなら、それを追従した形でRezしたいわけですが、
LSLにそんな便利な関数はないので、作ってみました。

●       ●
↑   が      ではなく、 
■     ← ■          ● ← ■ となるようにしたい。(■が左90度回転した)

※ Z軸方向の回転しか考慮していません。

// 回転座標値算出 引数:中心座標, 目的座標, 回転値
vector fncRotPoint(vector vctCenterPos, vector vctTargetPos, rotation rotAngel)
{
// 回転値をVector型に変換して保持
vector vctBuff = llRot2Euler(rotAngel);
// Z軸の回転値を抽出  
float fltAngle = vctBuff.z;

// 中心座標と目的座標の差分を算出 ※ X,Yの長さを計算
float XL1 = vctTargetPos.x - vctCenterPos.x;
float YL1 = vctTargetPos.y - vctCenterPos.y;

// 三角関数で回転座標を計算
float X2 = vctCenterPos.x + llCos(fltAngle) * XL1 - llSin(fltAngle) * YL1;
float Y2 = vctCenterPos.y + llSin(fltAngle) * XL1 + llCos(fltAngle) * YL1;

vector vctRtn = *1; // Z軸の高さはそのまま返す(考慮していない)
return vctRtn;

}
*1 = <X2,Y2,vctTargetPos.z>です。タグと判断して、Web表示されないようです。
   ここでは「<」を全角にすることで表示させています。コピペ時注意

これで、回転座標を算出できます。

座標は回転したように算出されますが、RezオブジェクトそのもののZ軸角度は
無回転のまま座標を設置するので、RezオブジェクトのZ軸の角度に本体が
回転した回転値を足して(LSL的には乗算して)あげる必要があります。

まぁ、これ見て分かる人なら、たぶん、考慮できるでしょうw

三次元的な回転も考慮したい場合は、どうやるんでしょうねぇ・・・
私の頭ではこれが限界!でも、たぶん、方法はあるw
  


Posted by karasu blackburn at 22:48Comments(5)スクリプト