ソラマメブログ

2008年08月16日

歯車作れるかな

second life physical で google ってみたら
-----
YouTube - Physical Gears in Second Life
-----
を見つけた
-----
へ~ 歯車作れるんじゃん
-----
というわけで 自分でも試してみることにした
-----

-----
最初手作業で歯を付けようとしていて 角度のグリッドで 30度が選べないことに気がつき こんなのやってられるか~
-----
と最初からやり直そうとリンクを外したら 物理にしてたので こんなことになってしまった w
-----
ここは 歯は rez するしかないだろうと 試行錯誤で
//
// File: MakingGear.lsl
// Date Author number of nodes
// 2008/8/15 walkinglint 15
//
integer num_of_teeth = 12;
float gear_body = 3;
float teeth = 0.5;
float r;
integer i;
default {
state_entry() {
r = (gear_body + teeth) / 2.0 - 0.05;
}
touch_start(integer total_number) {
float deg = 360.0 / num_of_teeth;
rotation rot = llEuler2Rot(<0.0, 90.0, 0.0> * DEG_TO_RAD);
for (i = 0; i < num_of_teeth; i++) {
llRezObject("teeth", llGetPos() + llSin(deg * i * DEG_TO_RAD), 0> * r, ZERO_VECTOR, rot, 1);
rot *= llEuler2Rot(<0.0, 0.0, deg> * DEG_TO_RAD);
}
}
}
をでっちあげ
-----

-----
ようやく 歯 のレイアウトに成功 w
-----

-----
さて動くかな?
-----
一方の歯車に 回転させるスクリプトを入れます
//
// File: Gear.lsl
// Date Author number of nodes
// 2008/8/15 walkinglint 4
//
integer is_moving = FALSE;
default {
touch_start(integer total_number) {
is_moving = !is_moving;
if (is_moving) {
llTargetOmega(<0.0, 0.0, 1.0>, 1.0, 1.0);
} else {
llTargetOmega(<0.0, 0.0, 1.0>, 0.0, 1.0);
}
}
}
-----

-----

-----
結構滑らかに動きます
-----
歯車と歯車との間隔をあまり近づけると止まってしまうようです
-----

-----

-----
ギア比 変えたりすると面白いかも w
-----

同じカテゴリー(walking のスクリプティング講座)の記事
 プロフィール写真の表示に問題 (2009-11-30 20:55)
 ミニ太陽系 (2009-03-21 06:03)
 関数から文字列を返したら何か問題になる? (2009-03-18 18:02)
 llListFindList って型って関係ないんだったっけ (2009-03-18 14:02)
 夏時間(PDT)の実験 (2009-03-08 22:04)
 15パズルの作り方(その3) (2009-03-08 06:03)
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。