ソラマメブログ

2008年11月17日

蝶の作り方 - 逐次解説(その2)

次回と次々回ぐらいで終わるかな... w
-----
//
// File: swarm.lsl
// Date Author number of nodes
// 2007/9/24 walkinglint 164
//
// Swarm script
// by Apotheus Silverman
// This script is my implementation of the well-known swarm algorithm
// which can be found in numerous open-source programs.
// Due to the specifics of the SL environment, I have strayed from some
// of the traditional rules slightly. Regardless, the end effect is
// indistiguishable from the original algorithm.
// Configurable parameters
// Determines whether or not to enable STATUS_SANDBOX.
//
integer sandbox = FALSE;
-----
STATUS_SANDBOX というのは
-----
If value is TRUE, object can't cross region boundaries or move more than 10m
from its start location (and loses physical attribute).
-----
というものらしい... ふむ~
-----
// Timer length
float timer_length = 0.5;
-----
llSensorRepeat の時間間隔のようだ
-----
// Die after this many seconds
integer kill_time = 300;
-----
使われてないぞ
-----
// Enables or disables schooling behavior
integer school = TRUE;
-----
群れるか群れないかを切り分けているのか
-----
// Schooling comm channel
integer school_comm_channel = 9284;
-----
群れのコミュニケーション用のチャネル
-----
// Schooling behavior update interval (should be a multiple of timer_length)
float school_update_interval = 2.0;
-----
群れの動きをアップデートする時間間隔?
-----
// How much force to apply with each impulse
float force_modifier = 0.7;
-----
llSetForce でかける力の大きさ
-----
// How much force to apply when repulsed by another like me
float repulse_force_modifier = 0.86;
-----
llApplyImpulse でかける力の大きさ(衝突時)
-----
//
// How much friction to use on a scale from 0 to 1.
// Note that friction takes effect each timer cycle, so the lower the timer length,
// the more the friction you specify here will take effect, thereby increasing actual
// friction applied.
//
float friction = 0.45;
-----
llApplyImpulse でかける摩擦? の大きさ
-----
//
// How much to modify the rotation strength. Higher numbers produce greater strength
// Note that if the modifier is too small, the object may not rotate at all.
//
float rotation_strength_modifier = 2.8;
-----
llLookAt でかける回転力の大きさ
-----
// How much to modify rotation damping. Higher numbers produce slower rotation.
float rotation_damping_modifier = 5000000.0;
-----
llLookAt でかけるダンピングの大きさ
-----
//
// Does this object "swim" in air or water?
// 2 = air
// 1 = water
// 0 = both
//
integer flight_mode = 2;
-----
領域指定 2 は空を指示
-----
// Maximum distance from spawn point
float max_distance = 2.5;
-----
初期位置から離れる事のできる距離の最大値?
-----
// How far away to scan for others like me
float sensor_distance = 5.0;
-----
他を探すスキャン距離の最大値
-----
// *** Don’t change anything below unless you *really* know what you’re doing ***
float mass;
vector spawn_location;
float school_timer = 0.0;
vector school_modifier = <0, 0, 0>;
-----
後で用いられる変数
-----
// Update rotation function
do_rotation(vector mypos, vector myvel) {
llLookAt(mypos + myvel, mass * rotation_strength_modifier, mass * rotation_damping_modifier);
-----
今の位置から進行(速度)方向を向く
-----
}
// Collision function
collide(vector loc) {
vector mypos = llGetPos();
// Apply repulse force
vector impulse = llVecNorm(mypos - loc);
llApplyImpulse(impulse * repulse_force_modifier * mass, FALSE);
// llSay(0, "collide() - impulse " + (string)impulse + " applied.");
// Update rotation
do_rotation(mypos, llGetVel());
-----
与えられた位置から今の位置への差分を impulse とし その方向に力を加え その方向を向く
-----
位置を与えることで反発する動きを作っている
-----
}
-----
(続く)

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