2008年02月19日
回転系LSL
わたしゃ回転系のスクリプトが苦手です。
オイラ、オイラー表記なんてわからんよ。
でも結構ソレを書かなくてはいけないケースがある。
一番よくあるのは、場所(position)と回転(rotation)を同時に動かすケース。
回転軸がルートプリムじゃないケース...例えばドアとか
(ドアでもルートプリムは作れますけどね)
場所と回転を同時に動かすには...llSetPrimitiveParams
ってのはすぐ思い出すのだけど、回転のセットの仕方がめんどうくさい。
だから関数化するのだけど、すぐ忘れるので覚書。
PosRot(vector Pos, vector Rot){
rotation r = llEuler2Rot(Rot * DEG_TO_RAD);
llSetPrimitiveParams([PRIM_POSITION,Pos,PRIM_ROTATION,r]);
}
ポイントなのは回転指定(Rot)がベクター...つまりオイラー表記であること。
そしてそれがDegree...つまりラジアンではなくて、角度であること。
PosもRotも編集ダイアログの値をそのまま参考にできる。
(場合によっては...PosはllGetLocalPosで取得しなくちゃいけないけど)
回転(rotation)は、直感的にピンと来ないので、角度っちゅうもので指定しているわけです。
まぁ、いまさら...な人には今さらなネタなんですけどね
オイラ、オイラー表記なんてわからんよ。
でも結構ソレを書かなくてはいけないケースがある。
一番よくあるのは、場所(position)と回転(rotation)を同時に動かすケース。
回転軸がルートプリムじゃないケース...例えばドアとか
(ドアでもルートプリムは作れますけどね)
場所と回転を同時に動かすには...llSetPrimitiveParams
ってのはすぐ思い出すのだけど、回転のセットの仕方がめんどうくさい。
だから関数化するのだけど、すぐ忘れるので覚書。
PosRot(vector Pos, vector Rot){
rotation r = llEuler2Rot(Rot * DEG_TO_RAD);
llSetPrimitiveParams([PRIM_POSITION,Pos,PRIM_ROTATION,r]);
}
ポイントなのは回転指定(Rot)がベクター...つまりオイラー表記であること。
そしてそれがDegree...つまりラジアンではなくて、角度であること。
PosもRotも編集ダイアログの値をそのまま参考にできる。
(場合によっては...PosはllGetLocalPosで取得しなくちゃいけないけど)
回転(rotation)は、直感的にピンと来ないので、角度っちゅうもので指定しているわけです。
まぁ、いまさら...な人には今さらなネタなんですけどね
