2009年08月02日
パーティクル設定項目について
パーティクルの設定項目で特にわかりにくかったものを、忘れないためにメモ。
PSYS_SRC_PATTERN_ANGLE
PSYS_SRC_ANGLE_BEGINとPSYS_SRC_ANGLE_ENDで指定された平坦な扇形(V字?)にパーティクルを噴霧。
この際、放出平面はYZ平面上となり、PSYS_SRC_ANGLE_BEGIN、PSYS_SRC_ANGLE_ENDはいずれもZ軸が0度となる角度(ラジアン)。

PSYS_SRC_PATTERN_ANGLE_CONE
PSYS_SRC_ANGLE_BEGINとPSYS_SRC_ANGLE_ENDで指定されたコーン(円錐?)にパーティクルを噴霧。
PSYS_SRC_ANGLE_BEGIN、PSYS_SRC_ANGLE_ENDはいずれもZ軸が0度となる角度(ラジアン)。
PSYS_SRC_BURST_RADIUS
噴霧が開始される位置の中心からの距離(半径・メートル)。
ただし、オブジェクトと共に移動するマスク(PSYS_PART_FOLLOW_SRC_MASK)が指定されている場合は無視されてしまうので注意。
PSYS_PART_FOLLOW_VELOCITY_MASK
指定するとパーティクルの上端が常に進行方向を向くようになります。
なので、上向きの矢印などをテクスチャに指定しておくと、弓矢が飛んでいく様な見え方。
PSYS_SRC_PATTERN_ANGLE
PSYS_SRC_ANGLE_BEGINとPSYS_SRC_ANGLE_ENDで指定された平坦な扇形(V字?)にパーティクルを噴霧。
この際、放出平面はYZ平面上となり、PSYS_SRC_ANGLE_BEGIN、PSYS_SRC_ANGLE_ENDはいずれもZ軸が0度となる角度(ラジアン)。

PSYS_SRC_PATTERN_ANGLE_CONE
PSYS_SRC_ANGLE_BEGINとPSYS_SRC_ANGLE_ENDで指定されたコーン(円錐?)にパーティクルを噴霧。
PSYS_SRC_ANGLE_BEGIN、PSYS_SRC_ANGLE_ENDはいずれもZ軸が0度となる角度(ラジアン)。
PSYS_SRC_BURST_RADIUS
噴霧が開始される位置の中心からの距離(半径・メートル)。
ただし、オブジェクトと共に移動するマスク(PSYS_PART_FOLLOW_SRC_MASK)が指定されている場合は無視されてしまうので注意。
PSYS_PART_FOLLOW_VELOCITY_MASK
指定するとパーティクルの上端が常に進行方向を向くようになります。
なので、上向きの矢印などをテクスチャに指定しておくと、弓矢が飛んでいく様な見え方。
2009年08月02日
物体の回転その2(対空砲)

XY平面上でのX軸(単位ベクトル<1,0,0>)からの回転(水平回転)
rotation newRot=llRotBetween(<1,0,0>,<norm.x,norm.y,0>);
垂直回転
rotation newRot2=llEuler2Rot(<0,llAcos(norm.z)-PI/2.0,0>);
回転実行(順番が大事)
llSetRot(newRot2*newRot);
だいぶシンプルになりました。が、相変わらず思考はvector。。。^^;
ホントにいいのかな、これで。。(笑
対空砲の動きをする箱の中身
default
{
state_entry()
{
llSensorRepeat("","",AGENT|ACTIVE,30,PI,0.1);
}
sensor(integer detectedNum)
{
if (llDetectedKey(0)==llGetOwner() && llDetectedKey(0)!=NULL_KEY)
{
vector targetVector=llDetectedPos(0)-llGetPos();
vector norm=llVecNorm(targetVector);
rotation newRot=llRotBetween(<1,0,0>,<norm.x,norm.y,0>);
rotation newRot2=llEuler2Rot(<0,llAcos(norm.z)-PI/2.0,0>);
llSetRot(newRot2*newRot);
}
}
no_sensor()
{
}
}