2007年04月10日
2007年04月10日
【asa】意外と知られていない!? プリム透明化
たとえばガラス窓なんかを作る際、プリム・オブジェクトの「編集」メニューでTransparent設定をいじりします。
ここ、値の設定が0~90までできるようになってます。
しかし最大値の90を設定しても完全に透明化しません。
ガラスのようなものを作るなら存在感を残すため90とかで良いと思います。
しかし何らかの事情で完全に見えなくしたい場合に、これでは都合が悪いですね。
スクリプトを使わずにこれを実現する場合、アルファチャンネルを使えるソフトでテクスチャを作り、これを実現することもできます。
が、スクリプトを使う場合は、たった↓これだけでできます。
---------------------- プリム1つの場合
default {
state_entry(){
llSetAlpha(0.0,ALL_SIDES);
}
}
----------------------
---------------------- linkされた複数プリムをまとめて全部
default {
state_entry(){
llSetLinkAlpha(LINK_SET,0.0,ALL_SIDES);
}
}
----------------------
ついでに、こんなんすると、touchする度に表示/非表示が入れ替わるプリムになります。
touchした時(touch_startイベント発生)、
もしも現在それが表示されてたら(llGetAlpha()が 0.0より大きければ)、非表示(llSetAlpha(0.0,ALL_SIDES))。
そうでなければ(else)、表示(llSetAlpha(1.0,ALL_SIDES))。
という意味になります。
----------------------
default {
touch_start(integer detected){
if(llGetAlpha(ALL_SIDES) > 0.0){
llSetAlpha(0.0,ALL_SIDES);
}
else{
llSetAlpha(1.0,ALL_SIDES);
}
}
}
----------------------
ここ、値の設定が0~90までできるようになってます。
しかし最大値の90を設定しても完全に透明化しません。
ガラスのようなものを作るなら存在感を残すため90とかで良いと思います。
しかし何らかの事情で完全に見えなくしたい場合に、これでは都合が悪いですね。
スクリプトを使わずにこれを実現する場合、アルファチャンネルを使えるソフトでテクスチャを作り、これを実現することもできます。
が、スクリプトを使う場合は、たった↓これだけでできます。
---------------------- プリム1つの場合
default {
state_entry(){
llSetAlpha(0.0,ALL_SIDES);
}
}
----------------------
---------------------- linkされた複数プリムをまとめて全部
default {
state_entry(){
llSetLinkAlpha(LINK_SET,0.0,ALL_SIDES);
}
}
----------------------
ついでに、こんなんすると、touchする度に表示/非表示が入れ替わるプリムになります。
touchした時(touch_startイベント発生)、
もしも現在それが表示されてたら(llGetAlpha()が 0.0より大きければ)、非表示(llSetAlpha(0.0,ALL_SIDES))。
そうでなければ(else)、表示(llSetAlpha(1.0,ALL_SIDES))。
という意味になります。
----------------------
default {
touch_start(integer detected){
if(llGetAlpha(ALL_SIDES) > 0.0){
llSetAlpha(0.0,ALL_SIDES);
}
else{
llSetAlpha(1.0,ALL_SIDES);
}
}
}
----------------------




