BOXプリムの中空とテクスチャーの関係

このページについて

趣旨

BOXタイプのプリムに中空を設定した場合、くりぬかれた面にテクスチャーを貼る際の「面ごとに繰り返す(repeat)」や「ずれ(offset)」の数値の計算が非常に難解かつ煩雑であることから、それらの関係を調べ、算出方法と数値一覧を示す。

特記事項

「面ごとに繰り返す:水平(u)」の「反転」欄にチェックを入れた方が望ましい場合があるが、この項目はスクリプトから制御できない。従って、このページでは「チェックを入れない」前提で話を進める。もし、チェックを入れる場合、「ずれ:水平(u)1)」について、次の処理を行う必要がある。

「面ごとに繰り返す:水平(u)」の「反転」欄について
チェックを入れる場合は、符号を逆転させた値を使う

数値の算出方法

  • hollow … BOXの1辺に対する中空の1辺の割合
    • 値の範囲:0.000 〜 0.950
    • 値の取得方法
      llList2Float(llGetPrimitiveParams([PRIM_TYPE]), 3);
    • これは、編集ウィンドウ内「中空」の値を100で割ったものに等しい

面ごとに繰り返す:水平(u)

// hollow -> repeat.u
float uuHollow2RepeatU(float hollow){
    return 4 / hollow;
}

ずれ:水平(u)

// hollow -> offset.u
float uuHollow2OffsetU(float hollow){
    float u = - (hollow * 5 - 4) / (hollow * 2);
    if (u >= 1){
        u -= llRound(u);
    }
    return u;
}

数値一覧

サンプルスクリプト

中空(hollow)を読み取り、それに合わせてテクスチャーの繰り返し(repeat)とずれ(offset)を設定するスクリプト。

default{
    state_entry(){
        float hollow = llList2Float(llGetPrimitiveParams([PRIM_TYPE]), 3);
        float repeat_u = 4 / hollow;
        float offset_u = - (hollow * 5 - 4) / (hollow * 2);
        if (offset_u >= 1){
            offset_u -= llRound(offset_u);
        }
        llScaleTexture(repeat_u, 1.0, 5);
        llOffsetTexture(offset_u, 1.0, 5);
    }
}
1) 表内のoffset.uの値
最終更新: 2011年01月09日 12 : 24 by arz Nitely
http://arzNitely.com/lsl/study/box_hollow/index.html

Copyright 2007-2010 ©arzNitely.com all right reserved

www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0