BlackSheep-LSL@Wiki

llSetColor

最終更新:

mizcremorne

- view
メンバー限定 登録/ログイン

llSetColor

llSetColor(vector color, integer face)

引数faceで指定した面の色を引数colorで指定した色にする。

色の指定はvector型で行うが、値の範囲は<0.0, 0.0, 0.0>~<1.0, 1.0, 1.0>となる。
3つの要素のうち先頭からRed、Green、Blueの色要素の指定となっている。
Webページ等の色指定で一般的なRGB形式は0~255の範囲で色要素の強さを指定するが、LSLでは0.0~1.0の範囲なので注意すること。
0~255の色要素をLSL用に変換するには、255で割り算してやれば良い。
一般的なRGB形式の指定値との対比を参考までに掲載しておく。
0~255 16進数 LSL
0 0 0
64 40 0.25
128 80 0.5
192 C0 0.75
255 FF 1.0

代表的な色のLSL表現
vector値
<1.0, 0.0, 0.0>
<0.0, 1.0, 0.0>
<0.0, 0.0, 1.0>
黄色 <1.0, 1.0, 0.0>
水色 <0.0, 1.0, 1.0>
<1.0, 0.0, 1.0>
<1.0, 1.0, 1.0>
灰色 <0.5, 0.5, 0.5>
<0.0, 0.0, 0.0>

面の色を取得したい場合はllGetColor関数を使う。
また、引数faceに指定する数値に関してもllGetColor関数の説明を参照。

llSetColor関数で変更できるのはスクリプトが稼動しているprimの色のみである。
リンクされているprimの色を変更するにはllSetLinkColor関数を使う。
また、primの色と透明度を同時に制御したい場合はllSetPrimitiveParams?関数またはllSetLinkPrimitiveParams?関数を使うとよい。

なお、vector値は簡単に四則演算が出来るのでグラデーションの実装は容易である。
例えば赤(<1.0, 0.0, 0.0>)から青(<0.0, 0.0, 1.0>)へと色をゆるやかに変化させたい場合、以下のような実装にすれば良い。

vector start_color = <1.0, 0.0, 0.0>;
vector end_color = <0.0, 0.0, 1.0>;
integer grad = 32; // 32段階のグラデーションで変化させる
integer counter = 0; // グラデーション用カウンター

default {
  touch_start(integer detected){
    counter = 0;
    llSetTimerEvent(1.0);
  }
  
  timer(){
    llSetColor(start_color + ((end_color - start_color) / grad) * counter, ALL_SIDES);
    counter ++;
    if (counter > grad){
      llSetTimerEvent(0.0);
    }
  }
}


名前:
コメント:
記事メニュー
目安箱バナー