ソラマメブログ

2008年06月19日

ランダム 3D モンドリアン - Randrian(その2)

寝ながら ふと Walking Jun:クォータニオンの威力 のことを思い出し
-----
あ... また ベースの方向を考慮してなかった... というわけで 再び Arare Cafe の砂場でチェック
-----
先の記事の場合は もっぱら 向きを クォータニオン つまり rotation で変えることがメインで
-----
位置に関しては 例えば llRot2Fwd(llGetRot()) は前向きのベクトル と イディオムのようにして扱っていたのだけれど
-----
LSL Wiki : rotation
-----

-----
When rotating a vector, the rotation must appear to the right of the vector
-----
などとあるのを読むと ベクトル の右側に rotation を置き 掛けてやると そのベクトルを回転してくれる(まあ rotation の定義からしてそうなんだろうけれど w)わけなので
-----
単純に 位置を動かすベクトルをそれで回転させてみた... うまくいくかな
-----

-----
うまくいってるようだ w (これで天井から吊り下げるような使い方もできますね)
-----
というわけで 修正版のスクリプト(暇なので売っちゃうかな 買う人いないだろうけれど 100L$ で w)
//
// File: randrian.lsl
// Date Author number of nodes
// 2008/6/19 walkinglint 19
//
integer i;
integer num_of_box = 50;
float range = 0.5;
float distance = 0.7;
gen_randrian() {
for (i = 0; i < num_of_box; i++) {
llRezObject("cube", llGetPos()
+ (<0.0, 0.0, distance>
+ <(llFrand(1.0) - 0.5) * range, (llFrand(1.0) - 0.5) * range, (llFrand(1.0) - 0.5) * range>) * llGetRot(),
ZERO_VECTOR, llGetRot(), 0);
}
}
default {
state_entry() {
llSetTimerEvent(0.0);
}
on_rez(integer param) {
llResetScript();
}
touch_start(integer total_number) {
gen_randrian();
llSetTimerEvent(60.0);
}
timer() {
gen_randrian();
}
}


同じカテゴリー(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)
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。