- 2008年2月18日 21:45
- flash
タロタローグの太郎さんの記事で、メタセコイアファイル(.mqo)のビューワはチュートリアルのプレビューレベルを想定していると書かれていた。でも、実際に三次元CG@七葉の保管庫などで公開されているテクスチャには bmp ファイルがよく用いられてるので、読み込めた方が良いんだろうなーと思って改造してみた。
タロタローグ ブログ » AS3版メタセコビューワ作った。まぁ、用途的にはインタラクティブ性があるだけで美しさは無いので、チュートリアルのプレビューレベルに使えればいいか?とかそんな感じ、もしくは三次元CG@七葉のような掲示板で練習中の作品を見せ合うために使うとかだろう。が、そう言った場合に木構造表示機能はあったほうがいいのか、それとも不要なのか?といった疑問に答えてくれる人が周りにいないので、今一開発が迷走してるように思える。
といっても、Flash は普通の方法では外部 bmp ファイルをロードできないので、便利な BMPDecoder クラスを使う。
改造する Metasequoia クラスのリビジョンは 233。
まず BMPDecoder クラスをインポートする。
import com.voidelement.images.BMPDecoder;
次に bmp ファイルのロード用に loadBMPMaterial というメソッドを追加する。
private function loadBMPMaterial(url:String):BitmapMaterial {
var material:BitmapMaterial = new BitmapMaterial();
var loader:URLLoader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.BINARY;
loader.addEventListener(Event.COMPLETE, function(event:Event):void {
var bmpLoader:URLLoader = event.target as URLLoader;
var decoder:BMPDecoder = new BMPDecoder();
material.bitmap = decoder.decode(bmpLoader.data);
material.maxU = material.maxV = 1;
material.resetMapping();
});
loader.load(new URLRequest(url));
return material;
}
最後に mqo ファイルのテクスチャに bmp ファイルが指定されていた場合の分岐を増やす。
if (tex.toLowerCase().search(/\.tga$/) != -1) {
material = loadTGAMaterial(path + tex);
} else if (tex.toLowerCase().search(/\.bmp$/) != -1) {
material = loadBMPMaterial(path + tex);
} else {
// テクスチャの URL を絶対にして読み込む
material = new BitmapFileMaterial(path + tex);
material.addEventListener(FileLoadEvent.LOAD_COMPLETE, materialLoadCompleteHandler);
material.addEventListener(FileLoadEvent.LOAD_ERROR, materialLoadErrorHandler);
}
サンプル
テクスチャの総ファイルサイズが前回のものと比べて10倍になってしまった...。Web上でビューワとして利用するなら、やっぱり jpeg や png などの軽いテクスチャに限定した方がいいのかもしれない。
- サンプル ※かなり重いです。
- Newer: コードのマークアップについて
- Older: fotologue の RSS からサムネイル画像を読み込む