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)
-----
あ... また ベースの方向を考慮してなかった... というわけで 再び 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();
}
}
Posted by walkinglint at 06:04│Comments(0)
│walking のスクリプティング講座