ソラマメブログ

2008年07月07日

日時計作ってみようかな(その5)

長さ変かも~ と書いていたが 多分 角度を間違えていて そこだけ修正した
-----

-----

-----

-----
ま いいかな どうかな...
-----
あ 1s 毎にしとくことはないな w
-----
というわけでリストもあげておきます
-----
まず本体側
//
// File: Sundial.lsl
// Date Author number of nodes
// 2008/7/7 walkinglint 32
//
vector bar_vec = <0.0, 1.0, 0.0>;
vector pole_vec = <0.0, 0.0, 1.0>;
float pole_height = 0.5;
integer BAR_LINK_NUM = 2;
default {
state_entry() {
llSetTimerEvent(60.0);
}
on_rez(integer param) {
llResetScript();
}
timer() {
vector vec = llGetSunDirection();
vector vec2 = -vec;
vec2.z = 0;
rotation rot = llRotBetween(bar_vec, vec2);
llSetRot(rot);
float dot_product = vec * pole_vec;
float rad = llAcos(dot_product);
rad = PI / 2 - rad;
// sin(rad) : cos(rad) = pole_hight : bar_length
float bar_length = pole_height * llCos(rad) / llSin(rad);
if ((bar_length <= 0.01) || (10.0 < bar_length)) {
bar_length = 0.0;
}
llMessageLinked(BAR_LINK_NUM, 0, (string)bar_length, NULL_KEY);
}
touch_start(integer total_number) {
vector vec = llGetSunDirection();
llOwnerSay((string)vec);
float dot_product = vec * pole_vec;
float rad = llAcos(dot_product);
rad = PI / 2 - rad;
llOwnerSay((string)(rad * RAD_TO_DEG));
}
}
次に影の側
//
// File: Sundial_bar.lsl
// Date Author number of nodes
// 2008/7/7 walkinglint 17
//
default {
on_rez(integer param) {
llResetScript();
}
link_message(integer sender_num, integer num, string str, key id) {
vector scale = llGetScale();
float bar_length = (float)str * 2.0;
if (bar_length == 0.0) {
llSetAlpha(0.0, ALL_SIDES);
} else {
llSetAlpha(0.5, ALL_SIDES);
scale.y = bar_length;
llSetScale(scale);
}
}
}

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