Metasequoia改造論(2) 透明マップの読み込み

このエントリをはてなブックマークに追加このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加このエントリをkwoutに追加
2008年2月5日 火曜日1:56:15

で、次にMetasequoiaクラスの修正。Metasequoia#parseMaterialChunk内の、Materialチャンク行を解析しているfor文を、MetasequoiaMaterialを使用するように変更。

for (; l <endLine; ++l) {
    var material:MaterialObject3D;
    line = lines[l];
   
    // マテリアルの名前を取得
    var nameBeginIndex:int = line.indexOf("\"");
    var nameEndIndex:int = line.indexOf("\"", nameBeginIndex + 1);
    var name:String = line.substring(nameBeginIndex + 1, nameEndIndex);
    _materialNames.push(name);
   
    // テクスチャファイル名
    var tex:String = getParam(line, "tex");
   
    if (tex) {
        // テクスチャファイル名を取り囲む " " を取り除く
        tex = tex.substr(1, tex.length - 2);
        _materialsToLoad++;
        if (tex.toLowerCase().search(/\.tga$/) != -1) {
            material = loadTGAMaterial(path + tex);
        } else {
            // テクスチャの URL を絶対にして読み込む
            material = new BitmapFileMaterial(path + tex);
            material.addEventListener(FileLoadEvent.LOAD_COMPLETE, materialLoadCompleteHandler);
            material.addEventListener(FileLoadEvent.LOAD_ERROR, materialLoadErrorHandler);
        }
        // あまり重さが変わらないのでせっかくだからスムージング
        material.smooth = true;
    } else {
        // 形式 - col(1.000 1.000 0.000 1.000)
        var colorstr:String = getParam(line, "col");
        if (colorstr != null) {
            var color:Array = colorstr.match(/\d+\.\d+/g);
            var r:int = parseFloat(color[0]) * 255;
            var g:int = parseFloat(color[1]) * 255;
            var b:int = parseFloat(color[2]) * 255;
            var a:Number = parseFloat(color[3]) * 100;
            //trace("rgb = " + r + "," + g + "," + b);
            material = new ColorMaterial((r <<16) | (g <<8) | b);
        } else {
            material = MaterialObject3D.DEFAULT;
        }
    }
   
    material.doubleSided = this.doubleSided;
    material.name = name;
   
    materials.addMaterial(material, name);
}

for (; l <endLine; ++l) {
    var material:MetasequoiaMaterial;
    line = lines[l];

    //マテリアルの作成開始
    material = new MetasequoiaMaterial();

    //マテリアルロード完了イベントの設定
    material.addEventListener (FileLoadEvent.LOAD_COMPLETE , materialLoadCompleteHandler);
    //マテリアルのロード開始
    material.load(path , line);
    material.smooth = true;
    material.doubleSided = this.doubleSided;

    materials.addMaterial(material, material.name);
    _materialNames.push(material.name);
}

これで、透明マップを読み込み可能になった。ただし、TGA画像の読み込み能力を失ってる(Revision100がベースなので)ので、そこは要改良。

  • ページ:
  • 1
  • 2
  • 3

TrackBack URL :

コメントする

HTML convert time: 0.961 sec.