ソラマメブログ

2009年09月09日

2つの座標系とllRezObject

はい、こんにちは。わたくしです。
今回は自分がスクリプトを書く際によく使うものを忘れないように記述しとこうと思います。
ちなみにわたくしはプラグラムなんぞSL以外ではまったく使わないので
一般の方がすでに知ってるだろうことしか書けません。
あくまでの自分のための忘備録として書きます。


今回は2つの座標系についてです。
SLでは座標系が2つあります。


1.ワールド座標
これはsimの東西南北がxyz座標に対応しているものです。


2.ローカル座標
これはアバタやオブジェクトの上下左右がxyz座標に対応しているものです。


やっかいなのがこのローカル座標です。
ローカル座標ではアバタ(オブジェクト)の正面がx、左がy、上方がzです。
アバタやオブジェクトは向きを変えることで上下左右の方向も変わります。
ある位置のアバタが右へ向けばさっきまでの正面の方向も右に変わります。
だからややこしい。


しかし便利な命令が用意されています。
それが以下の3つ。
llRot2Fwd
llRot2Left
llRot2Up
の3つです。


それぞれ上から順にアバタ(オブジェクト)の正面(x座標)の値を左側(y座標)の値を上方(z座標)の値の
単位ベクトルを取得してくれます。
単位ベクトルは長さが1mのベクトルです。


つまりllRot2Fwd(llGetRot());と書けばいつでもアバタ(オブジェクト)の正面(x座標)の向きを取得してくれます。
単位ベクトルなので=<1,0,0>ですね。


llRot2Fwd(llGetRot());を書くことでアバタ(オブジェクト)がどの向きを向こうが、
その正面がx座標になってくれるのです。


同様にllRot2Left(llGetRot());を書くことでアバタ(オブジェクト)がどの向きを向こうが、
その左がy座標になってくれるのです。
便利だ。


これはわたくしが多用する命令llRezObjectを使うときにとても役に立ちます。
llRezObjectはオブジェクトからさらにオブジェクトを出す命令です。


llRezObject(string inventory, vector pos, vector vel, rotation rot, integer param)
・string inventory    出されるオブジェクトの名前
・vector pos       どの位置に出すかの場所
・vector vel        出されるオブジェクトのスピード
・rotation rot       出されるオブジェクトの角度
・integer param     なぜか分からないけど1にしとけばいいらしい
となりますね。


ここで問題なのがvector posです。
これはワールド座標系での位置です。
このままだとオブジェクトを右に回転したときなど違う方向に回転したときでも
これをローカル座標にしてない限り、同じ方向にREZされてしまいます。


なのでここで上記のllRot2Fwdなどを使います。
llGetPos() + llRot2Fwd(llGetRot())としておけば、
オブジェクトの今の位置プラスその正面方向の<1,0,0>の位置にREZしてくれます。


例としてタッチしたときにオブジェクトがどんな方向に向こうが必ず正面にREZされるスクリプトを書きます。



default{
  touch_start(integer x){
    llRezObject("hana",
              llGetPos() + llRot2Fwd(llGetRot()),
              llRot2Fwd(llGetRot())*30,
              ZERO_VECTOR,
              1);
  }
}


【追記】
vector velは出されるオブジェクトの速度で物理オブジェクトのときのみ有効。
ベクター値なのでllRot2Fwd(llGetRot())*30のように書く。
この場合、向きはアバタ(オブジェクト)の正面方向で大きさは<30,0,0>となる。
30の部分をいじって速度を変化させるといい。


こちらのブログもよろしくお願いします。
ブロガーの方のやつ





同じカテゴリー(スクリプト)の記事
 ダイアログとリッスンまとめ (2009-09-22 00:43)
 タッチイベントの途中に違う人にタッチを割り込ませない方法 (2009-09-13 19:59)
 llSetTimerEventについて (2009-09-12 23:40)
 ダイアログとリッスン (2009-09-11 17:18)
 はるか上空へ上りたい (2009-09-03 01:15)

この記事へのコメント
最近ゴンゾの姿を見ないんだが、ゴンゾはどうしてるんだ?と、一部で話題になっています。
そしてこれはだいぶ参考になりました。
Posted by たいこ at 2009年09月09日 08:11
なにこれすごいwww
ゴンゾって頭よかったんやねぇ~(´∀`*)
Posted by プシケプシケ at 2009年09月09日 12:56
>たいこさん
>ゴンゾはどうしてるんだ?
ちょっとお疲れ気味なのかもよ!

>参考になりました。
よかよか。
回転系はじっくりと取り組まないと本当に分かりづらいよね。
最近じっくり考えててようやく理解できてきた感じだよ。
俺の場合、スクリプトの組み方はサンプルを暗記しないと理解できんw


>プシちゃん
>ゴンゾって頭よかったんやねぇ
頭いいのはプシちゃんでしょ!
フランチ、英語、隠語を操れるやつはそうそういないぞ。
Posted by GG at 2009年09月10日 00:05
この正面rezのやつ、メモメモφ(・ω・`)...ポキ!☆_/o(゚ω゚`)!!

最近、モノ作り始めて、簡単な家を作っているんだけど、分るわ~、
ローカル座標がウザイのって!ww

横を伸ばしてるのに縦が伸びたり・・・ダラダラ━(il`・ω・´;) ━ダラダラ

おかげでグッチャになってるでwww
Posted by sara(さらこ) at 2009年09月10日 13:58
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。