ソラマメブログ
QRコード
QRCODE
アクセスカウンタ
読者登録
メールアドレスを入力して登録する事で、このブログの新着エントリーをメールでお届けいたします。解除は→こちら
現在の読者数 1人
プロフィール
Hitomi Magne
Hitomi Magne
ヌーディスト件ダンサーです。Susukinoによく出没します
オーナーへメッセージ

  

Posted by at

2008年11月25日

UNICODE表示プリム高速版


以前のバージョンだと1024 x 1024サイズのテクスチャに1024文字ずつ収納していましたが、あれだとテクスチャの読み込みに時間がかかって、電光掲示板のような用途では読み込まれる前に流れてしまったりしてしまいました。
一つの解決策はテクスチャを縦横半分に縮小してしまうことですが、これをすると文字が圧縮されて読みづらくなってしまうんですね。16x16ドットあればよさそうなものですが、テクスチャとして使用するとアンチエイリアスがかかってぼやけるため、カクカクしたままぼけるということになってしまいます。
というわけで、もう一つの解決策、512 x 512のテクスチャに縦横16文字ずつ、計256文字を収録するという方をやってみます。いままでこれをためらっていたのは、テクスチャの枚数が4倍になってしまうからです。合計163枚、アップロード料金実に1630L$を支払い(間違ったテクスチャを「大量アップロード」してしまい、途中であわててビューアを終了させたりしたので、実際はもっとかかっています><)えいやっと実行。
ついに完成しました。テクスチャ選択関数の行数が163行以上になってしまうので、これを手でUUIDのコピー、ペースト、数値の書き換えなんてやってたらいつまでかかるか分からないし、ちょっとした書き間違いを発見できなくなってしまうので、半自動でここを行うことにしました。

適当なプリムに、アップロードしたテクスチャを全部入れます。テクスチャの名前は
0000-00ff
0100-01ff
という具合に、開始コードポイント、終了コードポイントを16進で書いて、間を"-"でつなげたものです。そして以下のスクリプトを入れます。

string hexc="0123456789ABCDEF";
list textures;
string int2hex(integer x)
{
integer x0 = x & 0xF;
string res = llGetSubString(hexc, x0, x0);
x = (x >> 4) & 0x0FFFFFFF; //otherwise we get infinite loop on negatives.
while( x != 0 )
{
x0 = x & 0xF;
res = llGetSubString(hexc, x0, x0) + res;
x = x >> 4;
}
return "0x"+ res;

}
default
{

touch_start(integer total_number)
{
integer num=llGetInventoryNumber(INVENTORY_TEXTURE);
integer i;
string s;
key k;
string ks;
string st;
string ed;
list tmp;
string output;
textures=[];
llSay(0,"------"+(string)num+"-----");
for (i=0; i<num; i++){
s = llGetInventoryName(INVENTORY_TEXTURE, i);
k= llGetInventoryKey(s);
ks = (string)k;
tmp= llParseString2List(s, ["-"],[]);
st = llList2String(tmp,0);
ed = llList2String(tmp,1);
textures+=[(integer)("0x"+st)];
textures+=[ks];
}
textures=llListSort(textures, 2 ,TRUE);
integer start;
for (i=0; i<num*2; i+=2){
start=llList2Integer(textures,i);
st = int2hex(start);
ed = int2hex(start+255);
ks = llList2String(textures,i+1);
llSay(0,"if (code >= "+ st +" && code <= " + ed +" ) return [ " + st + ",\""+ks+"\" ];");

}
}
}


このプリムをタッチすれば、中に入れたテクスチャを調べてUUIDを抽出し、コードの形で喋ってくれます。チャットウィンドウでこれをコピーして、チャット行の頭の時刻とオブジェクト名をエディタで消してしまえばOK。というわけで、以下、改造版文字表示プリムのスクリプトです。  続きを読む


Posted by Hitomi Magne at 14:46Comments(1)LSL