ソラマメブログ

2008年07月16日

ローカル座標について その2

プリムの移動・回転  建物や乗り物 ドアやパーツを動かしたり 変形させたいとき 
(図はありません^^; 文字だけ^^; プリムの見本画像ができたら追加できるかな^^;)

1)スクリプトで動作。
2)プリムを片開きで。
3)POS移動と ROT回転 の組み合わせ。速さ・タイミング
4)リンクをもっとたくさん動かしたい時。
5)子ぷりむ A・B・C を同時に、同じくらいの 速さ・タイミングで動作させたい時。
★★★☆☆★★★

1)スクリプトで動作させるると、 1個の子ぷりむを移動できます、親プリムを移動すれば、まとまってオブジェクト全体が移動します。  SETPOS、SETROTの関数のは、動作が完了するには目で見えるくらいの時間がかかります。 これは、PCがいくら高性能でも、クライアントのビューアーが高速でも、動いている雰囲気の表現として、動いている過程を表示するためにしているのだと想像します。

この関数が実施できるのは、 物理ではない オブジェクトが基本ですという前置きがきめられています
Moves the object or primitive towards pos without using physics.
ユーザーが一時的に 非物理にすることができれば利用し動作できます



(位置・回転だけでなく、スクリプトでは、色、透明度、大きさ、形、なども変化させることで おもしろい変形ができます)


2)プリムを片開きであること、端の辺を中心に回転させたい時

プリムをROT回転すると、 中心で回転します、 片開きであること、端の辺を中心に回転させたい時は、
プリムをパスカット設定します、プリムの中心から半分を無くしてしまえば、良いですね。

★★★☆☆★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
3)POS移動と ROT回転 の組み合わせ。 速さ・タイミングについて
プリムをパスカット設定だけでは、イメージできない場合は、

SETPOS、SETROTの関数を実施します、 ここで、順番について考えましょう

1:ドアを開ける 少し移動SETPOS-開く回転SETROT
2:ドアを閉める 閉じる回転SETROT-少し移動SETPOS

回転した位置が本体と重ならないような位置へ少し移動もさせたい時ですね、

これを同時に動作させる方法があります。
//rules=[];
//rules= [ PRIM_POSITION, POS ];
//rules+=[ PRIM_ROTATION, ROT ];
//llSetLinkPrimitiveParams( link_num, rules );
http://wiki.secondlife.com/wiki/LlSetLinkPrimitiveParams/ja


1つの関数のパラメータとして実施すると、POS、ROTの設定が同時にできます。
動作は、 すこし滑らかな感じになると思います。パラメータがたくさんあってもの 関数は1度であり 遅延も0.2になるようです。

★★★☆☆★★★
4)リンクをもっとたくさん動かしたい時

複数の子ぷりむを、移動するときに 順番に作業すれば、順番に移動することになります。
子ぷりむA・動け・子ぷりむB・動け・子ぷりむC・動け・ と順にいくらでも動かせます。


★★★☆☆★★★
5)子ぷりむ A・B・C を同時に、同じくらいの 速さ・タイミングで動作させたい時。
たとえば3プリムで作られた【ドア】【家具の引き出し】は 3プリムで オブジェクトとして動いてほしい場合です

子ぷりむを動かせ==>というタイミングで 子ぷりむA・子ぷりむB・子ぷりむC がそれぞれ動作をはじめなくてはいけません。

リンクメッセージで、通信と受信を利用するのが 良いでしょう、
発信する:メイン・スクリプトと、  受信する子ぷりむに準備する:スクリプト に機能を分割しましょう

メイン・スクリプトが リンクぷりむにメッセージを同時に発信した場合は、十分に高速で 受信した子ぷりむのスクリプトは同時に動作したように錯覚できる程に動作できるでしょう。

(しかしオブジェクトの最大250個ほどのプリムの処理を実施するとなると、動作のズレも目で見えるくらいの時間がかってしまうようです。)


EX)お店とドアをリンクしないで、【ドア】を オブジェクトとして独立すれば、 親プリムの動作だけで、
リンクを検討することなく動作できます。


★★★☆☆★★★
6)滑らかな移動、もっと遅く移動できないか? 
できません、 速さを設定する数値はありません。 

細かく分割させるか、 物理オブジェクトとして動作する方法が検討できます。

滑らかな移動・高速に瞬間に移動させるには、オブジェクトを物理にすることで動作できます。
リンクされた一部のパーツだけを 物理で ユックリ滑らかに動作させることは できませんでした。



★★★☆☆★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
参考LSL
ドアを作ろう(初級スクリプト第五回)
http://miz.slmame.com/e1714.html

回転のデータの書き方  llEuler2Rot(<0.0, 0.0, 90.0> * DEG_TO_RAD)

オマジナイのように、この書き方は覚えてしまいましょう。
この書き方を利用して、ドアの回転を行う処理を書きます。

Z軸の回転
llEuler2Rot(<0.0, 0.0, 90.0> * DEG_TO_RAD)//反時計回り90度
llEuler2Rot(<0.0, 0.0, -90.0> * DEG_TO_RAD)//時計回り90度
llEuler2Rot(<0.0, 0.0, 270.0> * DEG_TO_RAD)//時計回り90度

★★★☆☆★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
回転の合成
http://www21.atwiki.jp/mizcremorne/pages/318.html#id_cf39017b
今の向きに変化を加えるのは 足し算ではなく 掛け算です
もとの向きに戻す場合は 変化させた数値を 引き算ではなく、割り算で実施できます

回転を合成することには、計算する順番で結果が異なります、おかしな動作だ~?と思ったら 記事を参考にしてみましょう。

★★★☆☆★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

SETPOS、SETROTの関数
http://wiki.secondlife.com/wiki/LlSetPos
http://wiki.secondlife.com/wiki/LlSetRot/ja


同じカテゴリー(ローカル座標)の記事画像
くるくる ぱーてぃくる ローカル座標 その4
ローカル座標について その1
同じカテゴリー(ローカル座標)の記事
 くるくる ぱーてぃくる ローカル座標 その4 (2008-07-18 13:51)
 ローカル座標とグローバル座標 について その3 (2008-07-17 12:59)
 ローカル座標について その1 (2008-07-15 19:55)
Posted by しんいち at 12:19│Comments(0)ローカル座標
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。