Site search

Google
WWW を検索 backup-beta.blogspot.com を検索

2008年7月29日火曜日

テクスチャの位置を設定するスクリプト

プリムの任意の面だけテクスチャの位置をずらしたいってことありますよね。
default
{
    state_entry()
    {
        llOffsetTexture(0.2,0,4);  // 面4のテクスチャを左に20%ずらす
    }
}

ずらした後はスクリプトを消してもプリムにテクスチャの位置は記憶されてます。

サイズなんかも同時に調整することが多いと思いますので、llScaleTexturellOffsetTexture、あと角度はllRotateTextureで、まとめて処理するときはllSetPrimitiveParamsのPRIM_TEXTUREですね。

テクスチャのサイズや位置をスクリプトで制御すると色んな製品に応用できますよ♪
うちの製品では、デジタル時計カレンダーラッキーレターボード1プリム9アイテムベンダーなどで使ってます。あとメッセージを何文字か表示できるボードやタイニーアバターの表情の切り替えとか他にも色々使えるんじゃないかなって思います^^



今回はタッチの度にテクスチャの位置が切り替わるスクリプトを書いてみました。木目のままじゃわかりにくいと思うので、面0に何かわかりやすいテクスチャを貼ってから試してくださいねw
// タッチでテクスチャの表示位置を切り替え 左上→右上→左下→右下
list offset=[  // テクスチャのオフセット横と縦
-0.25,0.25,  // 左上表示
0.25,0.25,  // 右上表示
-0.25,-0.25,  // 左下表示
0.25,-0.25];  // 右下表示
integer i=0;  // リスト読み出しに使うポインタ
integer len;

offset_texture()
{
    float u=llList2Float(offset,i);  // 横のオフセット
    float v=llList2Float(offset,i+1);  // 縦のオフセット
    llOffsetTexture(u,v,0);  // 面0のテクスチャの位置設定
}

default
{
    state_entry()
    {
        len=llGetListLength(offset);  // リストの長さ
        llScaleTexture(0.5,0.5,0);  // 面0のテクスチャを縦横2倍で表示
        offset_texture(); // offset_textureで最初はテクスチャの左上を表示
    }

    touch_start(integer total_number)
    {
        i+=2;  // ポインタに2ずつ加算してリストを読む位置を変更
        if (i >= len) i=0;  // ポインタがリストの長さを超えたら0にする
        offset_texture(); // offset_texture実行
    }
}

0 件のコメント:

コメントを投稿