パーティクルのパラメータ生成

2007年6月22日 00:58

これまでに書いたように、
パーティクルを生成するには、関数としてはひとつでいいが、
実際に値を設定するとなると

パラメータの数が半端なく多い。


なので、
パラメータの意味がわかるようにある程度のものを
入力形式でコードを生成するプログラムを作成。


まだかなり適当に作っているので、コードとしては不完全な部分があると思いますが、
使いましょう。
んで、改良しましょう。

■■■パーティクルパラメータ生成プログラム■■■

ちなみにこれで生成されるコードは、
変数の設定値と処理をする関数。

stateがon、offでパーティクル処理を動かす or パーティクル処理を終了する
をわける関数を作成している。


ちなみにパーティクル処理を終わらすには、
パーティクルのリスト項目を「なし」にすればいい。

SecondLifeパーティクル | comment(0) | trackback(0) |

パーティクル4

2007年6月21日 18:59

パーティクルを使って色々するには、
01~03までの
処理を行い、なにかしらの方法で判別を行えばよい。


なるほど。そこまでこれは難しくなかった。

SecondLifeパーティクル | comment(0) | trackback(0) |

パーティクル3

2007年6月21日 18:58

パーティクルを作成するときに使えるテンプレート
※すべての設定をまずは有効にしてある。
-----------------------------------------------


integer PART_BOUNCE_MASK =0;
integer PART_EMISSIVE_MASK = PSYS_PART_EMISSIVE_MASK; //=0;

integer PART_FOLLOW_SRC_MASK = PSYS_PART_FOLLOW_SRC_MASK;//=0;
integer PART_FOLLOW_VELOCITY_MASK = PSYS_PART_FOLLOW_VELOCITY_MASK;//=0;

integer PART_INTERP_COLOR_MASK = PSYS_PART_INTERP_COLOR_MASK; //=0;
integer PART_INTERP_SCALE_MASK = PSYS_PART_INTERP_SCALE_MASK; //=0;

integer PART_TARGET_LINEAR_MASK = PSYS_PART_TARGET_LINEAR_MASK; //=0
integer PART_TARGET_POS_MASK = PSYS_PART_TARGET_POS_MASK; //=0;
integer PART_WIND_MASK = PSYS_PART_WIND_MASK; //=0;


integer PART_PATTERN = PSYS_SRC_PATTERN_EXPLODE ;
//PSYS_SRC_PATTERN_ANGLE;
//PSYS_SRC_PATTERN_ANGLE_CONE;
//PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY;
//PSYS_SRC_PATTERN_DROP;


float PART_START_ALPHA = 1.0;
float PART_END_ALPHA = 0.0;

vector PART_START_COLOR = <1.0,1.0,1.0>;
vector PART_END_COLOR = <0.6,0.6,0.6>;

vector PART_START_SCALE = <0.32,0.32,0.0>;
vector PART_END_SCALE = <4.0,4.0,0.0>;

float SRC_MAX_AGE = 0.0;
float PART_MAX_AGE = 4.5 ;

vector PART_ACCEL = <0.0,0.0,0.2>;

float PART_ANGLE_BEGIN = PI ;
float PART_ANGLE_END = PI ;

integer PART_BURST_COUNT = 4 ;
float PART_BURST_RADIUS = 0.0 ;
float PART_BURST_RATE = 0.0 ;

float PART_BURST_SPEED_MIN = 0.2 ;
float PART_BURST_SPEED_MAX = 0.3 ;

vector PART_OMEGA = <0.0,0.0,0.0> ;

string PART_TEXTURE = "ここにテクスチャの名前" ;
key PART_TARGET_KEY = NULL_KEY ;

SetParticle(integer on){
if (on){
llParticleSystem(
[ PSYS_PART_FLAGS , PART_BOUNCE_MASK |
PART_EMISSIVE_MASK |
PART_FOLLOW_SRC_MASK |
PART_FOLLOW_VELOCITY_MASK |
PART_INTERP_COLOR_MASK |
PART_INTERP_SCALE_MASK |
PART_TARGET_LINEAR_MASK |
PART_TARGET_POS_MASK |
PART_WIND_MASK
,PSYS_SRC_PATTERN, PART_PATTERN
,PSYS_PART_START_ALPHA, PART_START_ALPHA
,PSYS_PART_END_ALPHA, PART_END_ALPHA
,PSYS_PART_START_COLOR, PART_START_COLOR
,PSYS_PART_END_COLOR, PART_END_COLOR
,PSYS_PART_START_SCALE, PART_START_SCALE
,PSYS_PART_END_SCALE, PART_END_SCALE
,PSYS_SRC_MAX_AGE, SRC_MAX_AGE
,PSYS_PART_MAX_AGE, PART_MAX_AGE
,PSYS_SRC_ACCEL, PART_ACCEL
,PSYS_SRC_ANGLE_BEGIN, PART_ANGLE_BEGIN
,PSYS_SRC_ANGLE_END, PART_ANGLE_END
,PSYS_SRC_BURST_PART_COUNT, PART_BURST_COUNT
,PSYS_SRC_BURST_RADIUS, PART_BURST_RADIUS
,PSYS_SRC_BURST_RATE, PART_BURST_RATE
,PSYS_SRC_BURST_SPEED_MIN, PART_BURST_SPEED_MIN
,PSYS_SRC_BURST_SPEED_MAX, PART_BURST_SPEED_MAX
,PSYS_SRC_OMEGA, PART_OMEGA
,PSYS_SRC_TEXTURE, PART_TEXTURE
,PSYS_SRC_TARGET_KEY, PART_TARGET_KEY
]);
}else{
llParticleSystem([]);
}
}

SecondLifeパーティクル | comment(0) | trackback(0) |

パーティクル02

2007年6月21日 18:53

パーティクルのパラメータの説明概略

-------------------------------------

□変更できるかできないかのみの設定

■integer PART_BOUNCE_MASK=0;
オブジェクトのZ軸の高さより下にパーティクルが行かない。

■integer PART_EMISSIVE_MASK = PSYS_PART_EMISSIVE_MASK;
⇒キラキラ光る
⇒有効にするときは、PSYS_PART_EMISSIVE_MASKをセット。無効は0。

■integer PART_FOLLOW_SRC_MASK=0;
⇒オブジェクトと一緒にパーティクルが動くか否か。有効にするとオブジェクトの動きにあわせてパーティクルも動く
⇒有効にするときは、PSY_PART_FOLLOW_SRC_MASKをセット、無効は0。

■integer PART_FOLLOW_VELOCITY_MASK=0;
⇒パーティクルが回転するかしないか。
⇒有効にするときは、PSYS_PART_FOLLOW_VELOCITY_MASK、無効は0。


■integer PART_INTERP_COLOR_MASK=PSYS_PART_INTERP_COLOR_MASK;
⇒パーティクルの色が変わるようにする。
⇒有効ではPSYS_PART_INTERP_COLOR_MASK、無効は0。

■integer PART_INTERP_SCALE_MASK=PSYS_PART_INTERP_SCALE_MASK;
⇒パーティクルのサイズを可変にするか否か。
⇒有効はPSYS_PART_INTERP_SCALE_MASK、無効は0。

■integer PART_TARGET_LINEAR_MASK=0;
⇒パーティクルがターゲットに向かって一直線にとんでいく。
⇒有効は、PSYS_PART_TARGET_LINEAR_MASK、無効は0。

■integer PART_TARGET_POS_MASK=0;
⇒ターゲットに向かって飛んでいく。ホーミングミサイルのように。
⇒有効は、PSYS_PART_TARGET_POS_MASK、無効は0。

■integer PART_WIND_MASK=PSYS_PART_WIND_MASK;
⇒風に流されるかどうか。
⇒有効はPSYS_PART_WIND_MASK、無効は0。


□パターンとか

■integer PART_PATTERN=パターン定義
パーティクルの発生の形状を決める
以下パターン定義

◇PSYS_SRC_PATTERN_EXPLODE;
⇒爆発

◇PSYS_SRC_PATTERN_ANGLE;
⇒平面型(扇型に噴射)

◇PSYS_SRC_PATTERN_CONE;
⇒コーン型(コーン状に噴射)

◇PSYS_SRC_PATTERN_CONE_EMPTY
⇒逆コーン型(上記の逆)

◇PSYS_SRC_PATTERN_DROP
⇒ドロップ型(ポトンと落ちる)

□詳細パラメータ

■float PART_START_ALPHA=1.0;
■float PART_END_ALPHA=1.0;
⇒1.0:完全不透明。0.0:完全透明


■vector PART_START_COLOR = <1.0,1.0,1.0>;
■vector PART_END_COLOR = <0.6,0.6,0.6>;
⇒RGBの値で設定。ただし、0.0~1.0の範囲。

■vector PART_START_SCALE = <0.32,0.32,0.0>;
■vector PART_END_SCALE = <4.0,4.0,0.0>;
⇒パーティクルのサイズ。最大値4.0でXY座標のみ(パーティクルは平面に見えるため)

■float SRC_MAX_AGE =0.0;
⇒パーティクルの有効時間。単位は秒。値を0にするとずっと噴射。

■float PART_MAX_AGE =0.0;
⇒ひとつのパーティクルの有効時間。単位は秒。透明度などはこのパラメータを基準に動く。


■vector PART_ACCEL = <0.0,0.0,0.3>
⇒パーティクルの加速度。

■float PART_ANGLE_BEGIN=PI;
■float PART_ANGLE_END=PI;
⇒アングルの開始及び終了角度の指定

■integer PART_BURST_COUNT =4;
⇒一度にいくつ発射するか。


■float PART_BURST_RADIUS =0.0;
⇒パーティクルを噴射するときの半径。

■float PART_BURST_RATE=0.0;
⇒どのくらいの間隔でパーティクルを発射するか。

■float PART_BURST_SPEED_MIN = 0.2;
■float PART_BURST_SPEED_MAX = 0.3;
⇒噴射されるときの最小スピードと最大スピード

■vector PART_OMEGA = <0.0,0.0,0.0>;
⇒パーティクルの噴射方向を回転させる。


■string PART_TEXCUTE = "past_sound";
⇒パーティクルのテクスチャを指定


■key PART_TARGET_KEY = NULL_KEY;
⇒パーティクルが飛んでいくターゲットのキーを指定

SecondLifeパーティクル | comment(0) | trackback(0) |

パーティクル01

2007年6月21日 18:51

パーティクルとは粒子状のオブジェクト。

例えば、
煙、霧、水しぶき、噴水の水、滝、炎、火花、爆発、花火、花吹雪、落ち葉、雨、雪
など。


これらはスクリプトでしか制御できまへん。

しかもパーティクルを制御する関数は

llParticleSystem(list param);

だけ。

こいつを使うだけでできるらしい。


では、そのパラメータは?
ということで、

まず、引数を見てみると、listつまり配列形式となる。

中身は一つ(配列)ということなので、
パラメータは多いがそれらを一つのライブラリにしておくと楽とのこと。

これらのパラメータは次回。(かなり多い。)

SecondLifeパーティクル | comment(0) | trackback(0) |

パーティクル03

2007年6月21日 00:58

パーティクルを作成するときに使えるテンプレート
※すべての設定をまずは有効にしてある。
-----------------------------------------------


integer PART_BOUNCE_MASK =0;
integer PART_EMISSIVE_MASK = PSYS_PART_EMISSIVE_MASK; //=0;

integer PART_FOLLOW_SRC_MASK = PSYS_PART_FOLLOW_SRC_MASK;//=0;
integer PART_FOLLOW_VELOCITY_MASK = PSYS_PART_FOLLOW_VELOCITY_MASK;//=0;

integer PART_INTERP_COLOR_MASK = PSYS_PART_INTERP_COLOR_MASK; //=0;
integer PART_INTERP_SCALE_MASK = PSYS_PART_INTERP_SCALE_MASK; //=0;

integer PART_TARGET_LINEAR_MASK = PSYS_PART_TARGET_LINEAR_MASK; //=0
integer PART_TARGET_POS_MASK = PSYS_PART_TARGET_POS_MASK; //=0;
integer PART_WIND_MASK = PSYS_PART_WIND_MASK; //=0;


integer PART_PATTERN = PSYS_SRC_PATTERN_EXPLODE ;
//PSYS_SRC_PATTERN_ANGLE;
//PSYS_SRC_PATTERN_ANGLE_CONE;
//PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY;
//PSYS_SRC_PATTERN_DROP;


float PART_START_ALPHA = 1.0;
float PART_END_ALPHA = 0.0;

vector PART_START_COLOR = <1.0,1.0,1.0>;
vector PART_END_COLOR = <0.6,0.6,0.6>;

vector PART_START_SCALE = <0.32,0.32,0.0>;
vector PART_END_SCALE = <4.0,4.0,0.0>;

float SRC_MAX_AGE = 0.0;
float PART_MAX_AGE = 4.5 ;

vector PART_ACCEL = <0.0,0.0,0.2>;

float PART_ANGLE_BEGIN = PI ;
float PART_ANGLE_END = PI ;

integer PART_BURST_COUNT = 4 ;
float PART_BURST_RADIUS = 0.0 ;
float PART_BURST_RATE = 0.0 ;

float PART_BURST_SPEED_MIN = 0.2 ;
float PART_BURST_SPEED_MAX = 0.3 ;

vector PART_OMEGA = <0.0,0.0,0.0> ;

string PART_TEXTURE = "ここにテクスチャの名前" ;
key PART_TARGET_KEY = NULL_KEY ;

SetParticle(integer on){
if (on){
llParticleSystem(
[ PSYS_PART_FLAGS , PART_BOUNCE_MASK |
PART_EMISSIVE_MASK |
PART_FOLLOW_SRC_MASK |
PART_FOLLOW_VELOCITY_MASK |
PART_INTERP_COLOR_MASK |
PART_INTERP_SCALE_MASK |
PART_TARGET_LINEAR_MASK |
PART_TARGET_POS_MASK |
PART_WIND_MASK
,PSYS_SRC_PATTERN, PART_PATTERN
,PSYS_PART_START_ALPHA, PART_START_ALPHA
,PSYS_PART_END_ALPHA, PART_END_ALPHA
,PSYS_PART_START_COLOR, PART_START_COLOR
,PSYS_PART_END_COLOR, PART_END_COLOR
,PSYS_PART_START_SCALE, PART_START_SCALE
,PSYS_PART_END_SCALE, PART_END_SCALE
,PSYS_SRC_MAX_AGE, SRC_MAX_AGE
,PSYS_PART_MAX_AGE, PART_MAX_AGE
,PSYS_SRC_ACCEL, PART_ACCEL
,PSYS_SRC_ANGLE_BEGIN, PART_ANGLE_BEGIN
,PSYS_SRC_ANGLE_END, PART_ANGLE_END
,PSYS_SRC_BURST_PART_COUNT, PART_BURST_COUNT
,PSYS_SRC_BURST_RADIUS, PART_BURST_RADIUS
,PSYS_SRC_BURST_RATE, PART_BURST_RATE
,PSYS_SRC_BURST_SPEED_MIN, PART_BURST_SPEED_MIN
,PSYS_SRC_BURST_SPEED_MAX, PART_BURST_SPEED_MAX
,PSYS_SRC_OMEGA, PART_OMEGA
,PSYS_SRC_TEXTURE, PART_TEXTURE
,PSYS_SRC_TARGET_KEY, PART_TARGET_KEY
]);
}else{
llParticleSystem([]);
}
}

SecondLifeパーティクル | comment(0) | trackback(0) |

パーティクル02

2007年6月21日 00:55

パーティクルのパラメータの説明概略

-------------------------------------

□変更できるかできないかのみの設定

■integer PART_BOUNCE_MASK=0;
オブジェクトのZ軸の高さより下にパーティクルが行かない。

■integer PART_EMISSIVE_MASK = PSYS_PART_EMISSIVE_MASK;
⇒キラキラ光る
⇒有効にするときは、PSYS_PART_EMISSIVE_MASKをセット。無効は0。

■integer PART_FOLLOW_SRC_MASK=0;
⇒オブジェクトと一緒にパーティクルが動くか否か。有効にするとオブジェクトの動きにあわせてパーティクルも動く
⇒有効にするときは、PSY_PART_FOLLOW_SRC_MASKをセット、無効は0。

■integer PART_FOLLOW_VELOCITY_MASK=0;
⇒パーティクルが回転するかしないか。
⇒有効にするときは、PSYS_PART_FOLLOW_VELOCITY_MASK、無効は0。


■integer PART_INTERP_COLOR_MASK=PSYS_PART_INTERP_COLOR_MASK;
⇒パーティクルの色が変わるようにする。
⇒有効ではPSYS_PART_INTERP_COLOR_MASK、無効は0。

■integer PART_INTERP_SCALE_MASK=PSYS_PART_INTERP_SCALE_MASK;
⇒パーティクルのサイズを可変にするか否か。
⇒有効はPSYS_PART_INTERP_SCALE_MASK、無効は0。

■integer PART_TARGET_LINEAR_MASK=0;
⇒パーティクルがターゲットに向かって一直線にとんでいく。
⇒有効は、PSYS_PART_TARGET_LINEAR_MASK、無効は0。

■integer PART_TARGET_POS_MASK=0;
⇒ターゲットに向かって飛んでいく。ホーミングミサイルのように。
⇒有効は、PSYS_PART_TARGET_POS_MASK、無効は0。

■integer PART_WIND_MASK=PSYS_PART_WIND_MASK;
⇒風に流されるかどうか。
⇒有効はPSYS_PART_WIND_MASK、無効は0。


□パターンとか

■integer PART_PATTERN=パターン定義
パーティクルの発生の形状を決める
以下パターン定義

◇PSYS_SRC_PATTERN_EXPLODE;
⇒爆発

◇PSYS_SRC_PATTERN_ANGLE;
⇒平面型(扇型に噴射)

◇PSYS_SRC_PATTERN_CONE;
⇒コーン型(コーン状に噴射)

◇PSYS_SRC_PATTERN_CONE_EMPTY
⇒逆コーン型(上記の逆)

◇PSYS_SRC_PATTERN_DROP
⇒ドロップ型(ポトンと落ちる)

□詳細パラメータ

■float PART_START_ALPHA=1.0;
■float PART_END_ALPHA=1.0;
⇒1.0:完全不透明。0.0:完全透明


■vector PART_START_COLOR = <1.0,1.0,1.0>;
■vector PART_END_COLOR = <0.6,0.6,0.6>;
⇒RGBの値で設定。ただし、0.0~1.0の範囲。

■vector PART_START_SCALE = <0.32,0.32,0.0>;
■vector PART_END_SCALE = <4.0,4.0,0.0>;
⇒パーティクルのサイズ。最大値4.0でXY座標のみ(パーティクルは平面に見えるため)

■float SRC_MAX_AGE =0.0;
⇒パーティクルの有効時間。単位は秒。値を0にするとずっと噴射。

■float PART_MAX_AGE =0.0;
⇒ひとつのパーティクルの有効時間。単位は秒。透明度などはこのパラメータを基準に動く。


■vector PART_ACCEL = <0.0,0.0,0.3>
⇒パーティクルの加速度。

■float PART_ANGLE_BEGIN=PI;
■float PART_ANGLE_END=PI;
⇒アングルの開始及び終了角度の指定

■integer PART_BURST_COUNT =4;
⇒一度にいくつ発射するか。


■float PART_BURST_RADIUS =0.0;
⇒パーティクルを噴射するときの半径。

■float PART_BURST_RATE=0.0;
⇒どのくらいの間隔でパーティクルを発射するか。

■float PART_BURST_SPEED_MIN = 0.2;
■float PART_BURST_SPEED_MAX = 0.3;
⇒噴射されるときの最小スピードと最大スピード

■vector PART_OMEGA = <0.0,0.0,0.0>;
⇒パーティクルの噴射方向を回転させる。


■string PART_TEXCUTE = "past_sound";
⇒パーティクルのテクスチャを指定


■key PART_TARGET_KEY = NULL_KEY;
⇒パーティクルが飛んでいくターゲットのキーを指定

SecondLifeパーティクル | comment(0) | trackback(0) |

パーティクル01

2007年6月21日 00:47

パーティクルとは粒子状のオブジェクト。

例えば、
煙、霧、水しぶき、噴水の水、滝、炎、火花、爆発、花火、花吹雪、落ち葉、雨、雪
など。


これらはスクリプトでしか制御できまへん。

しかもパーティクルを制御する関数は

llParticleSystem(list param);

だけ。

こいつを使うだけでできるらしい。


では、そのパラメータは?
ということで、

まず、引数を見てみると、listつまり配列形式となる。

中身は一つ(配列)ということなので、
パラメータは多いがそれらを一つのライブラリにしておくと楽とのこと。

これらのパラメータは次回。(かなり多い。)

SecondLifeパーティクル | comment(0) | trackback(0) |