お手軽ブラインドの作り方

jinko

2007年08月17日 17:02


引っ越してからなかなかお部屋のものを作る時間がないのですが、
お部屋が外から丸見えなので、ブラインドを作ってみました。

タッチで開閉する。こんな、感じです。




なんか自己流ですけど、参考までに作り方を紹介してみようと・・・
いや・・・まだ、そんな大それたことやめといたほうが・・・
でも・・・まあなにかの参考にならへんやろか・・・・
と、ちょっと迷ってますが、思い切って!!やってみよーかなー!

そんなこんなで、脳内バトルがあったのですが、レシピに初挑戦です。
素材とか、スクリプトもおいて置きますので、ご興味がありましたら
是非お試しください。
(基本操作は省略しています)


(1)まず最初にハコを作成します。
作成ツールで、ハコのカタチを選んで地面をクリックします。
カメラが勝手にアップになってしまうと思いますが、
ワタシは、左右がX軸奥行きがY軸高さがZ軸になるようにカメラを回り込ませるようにしています。
ここで適当な方向で作っていくとあとでスクリプトの位置あわせで苦労したという過去がありましたので、そうしています。

(2)サイズを調整します。
ブラインドは、前から見て横と高さを4mの正方形、奥行きは20cmぐらいにしました。
ダイアログを出して、サイズ欄にx=4m, y=0.02m, z=4mと設定します。

(3)位置を調整します。
位置調整で上に移動します。
もちあげるでドラッグしてもいいのですが、位置調整を選んでドラッグする方がてっとり早いです。

ここまでのステップをまたGIFにしてみました。
(動画は相変わらずよくわかんないです・・・)




(4)テスクチャーの準備
ブラインドが開いているときと、閉じているときの画像を準備しておきます。
ワタシは、Illustratorでとりあえずこんな感じのを作ってみました。

(←右クリックして「名前をつけてリンク先を保存」でpngファイルをD/Lできます)

ブラインドが開いているとき、向こうが透けて見えるように透過を使っています。
透過を使うとき、TGA形式で保存するようにあちこちに書いていますが、
あんましつかったことなくてめんどくさいのでPNG形式(透過24ビット)を使用してます。
これで結構なんとかなっています。

これを、contentsのタブの中にドラッグして入れます。

(5)スクリプトの設定
タッチしたときテクスチャを変更するだけですので、シンプルですね。
contentsタブで「新しいスクリプト」を選んで、以下のソースをコピペしてください。
ピンクの文字の部分がテクスチャの名前になります。


//================================================
// [blind.lsl]
// Open / Close the window blind.
// ver 1.0 Aug 17, 2007 by Jinko Spitteler
//================================================

list lstTexture = [
    "chairo_close", // use when CLOSE
    "chairo_open" // OPEN
];

integer iTextureID = 0;

changeTexture () {
    llSetTexture(llList2String(lstTexture, iTextureID), ALL_SIDES);
    llScaleTexture(1.0, 1.0, ALL_SIDES);
    llRotateTexture(0.0 * DEG_TO_RAD, ALL_SIDES);
    iTextureID = 1 - iTextureID;
}


default {
    state_entry() {
        changeTexture();
    }
    touch_start(integer total_number) {
        changeTexture();
    }
}


以上で完成です。
タッチすると開いたり閉じたりします。
スクリプト単純なので、誰がさわっても開いたり閉じたりします。
まあ、でも、自分で使うにはいっかなって・・・

アドバイス、お気づきの点、ございましたら是非お知らせください。




(おまけ)
ところで、テクスチャと設定したいオブジェクトの向きがあっていない場合やサイズが違う場合、
ダイアログでいくら調整しても、このスクリプトが設定を変えてしまうので、困る場合があります。
そんなトキは、スクリプトの中の、真ん中らへんにある


llScaleTexture(1.0, 1.0, ALL_SIDES);
llRotateTexture(0.0 * DEG_TO_RAD, ALL_SIDES);

の部分をダイアログにあわせて調整してみてください。
(下の図の矢印の部分に対応しています)

Tips