ソラマメブログ

2008年06月16日

LSL:座ったアバターを回転させる

ぱるちゃんから、「座ったアバターを回転する方法」を聞かれて、
試してみました。

LSL:座ったアバターを回転させる

座ってるアバターは、オブジェクトにリンクされている状態なので、
llSetLinkPrimitiveParamsという関数でコントロールする


というのがポイントなんですけど、回転っていうのが、よくわかってなくて、
試行錯誤してしまいました^^;

回転の詳しい説明のページは、こちらです。
(1)wikiのRotationのページ
(2)BlackSheep-LSL@Wiki 回転について

どちらも丁寧に書いてくれているのですが、いまだに回転はよくわかりません^^;
手取り足取り教えてくれる先生募集中です^^(←本気)

とりあえず、タッチでグローバルのZ軸まわりに45度ずつ回転させる
サンプルを公開してみます。
なお、回転軸は考慮されていませんので、お気をつけください。



//座っているアバターを回転させるサンプル
// Jun 16, 2008 by Jinko Spitteler

//コンフィグレーション
integer gDegStep = 45;
vector gvSitPos = <1.000000, 0.250000, -0.350000>;
vector gvSitRot = <0.000000, 90.000000, 90.000000>;

//グローバル変数
float fRot = 0.0;
rotation grSitRot;

default {
state_entry() {
grSitRot = llEuler2Rot(gvSitRot * DEG_TO_RAD);
llSitTarget(gvSitPos, grSitRot);
}
touch_start(integer total_number) {
integer i;
key av = llAvatarOnSitTarget();
integer no = 0;

//誰も座ってなければなにもしない
if (av == NULL_KEY) return;

//アバターのリンクナンバーを探す
for (i = 1; i <= llGetNumberOfPrims() && no == 0; i++)
if (llGetLinkKey(i) == av) no = i;

//回転させる
fRot = (float)(((integer)fRot + gDegStep) % 360);
rotation rot = llEuler2Rot(<0,0, fRot> * DEG_TO_RAD)
           * grSitRot / llGetRot();
llSetLinkPrimitiveParams(no, [PRIM_ROTATION, rot]);

}
}


llSitTargetって、前も書いたことあるけど、深いです^^;
(過去記事は→こちら



同じカテゴリー(Tips)の記事画像
プリムスカートの簡単な作り方のヒミツ。初めてわかりました^^
球面の内側にテクスチャを貼るときの覚書です^^
LSL:日本語文字列をバイト数で長さ制限
スナップショットをレンズぼかしで加工してみました^^
LSLのカラーに変換するツールを作ってみました^^
ブラウザからインワールドの検索を使ってます^^
同じカテゴリー(Tips)の記事
 プリムスカートの簡単な作り方のヒミツ。初めてわかりました^^ (2009-07-11 14:57)
 球面の内側にテクスチャを貼るときの覚書です^^ (2009-06-27 07:28)
 LSL:日本語文字列をバイト数で長さ制限 (2009-04-29 12:06)
 スナップショットをレンズぼかしで加工してみました^^ (2008-10-06 04:14)
 LSLのカラーに変換するツールを作ってみました^^ (2008-10-02 21:15)
 ブラウザからインワールドの検索を使ってます^^ (2008-09-02 17:39)

Posted by jinko at 15:13│Comments(2)Tips
この記事へのコメント
ひさー^^

おお、これ、いいねー。おれもためしてみよっと^^
Posted by ファルコンファルコン at 2008年06月19日 12:26
ファルコンさん^^

お久しぶりですー

うん、おかしいかもなんですけど・・・

是非、試してみてください

回転のひみつわかったら教えてくださいねー
Posted by jinkojinko at 2008年06月20日 01:20
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。