Papervision3Dで
3Dオブジェクトにalphaプロパティが無くて「透明→不透明」の演出が出来ない。
「MovieMaterial」は処理が重いのでNG
そこでPapervision3Dを少しいじってみました。いまのところ「BitmapMaterial」かつ「Plane」の
3Dオブジェクトだけつくりました。
下記のコードを追加すれば「alpha」プロパティが追加されて
不透明度を操作することが出来ます。しかも軽い
ただ、BitmapDataのクローンを作成するので少しリソース食います
でかい画像をテクスチャにするときは使えない。
ファイル名:Plane.as
public var cmf=new ColorMatrixFilter([1,0,0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0]);
private var _alpha:Number=1;
public function reset_alpha(){
cmf=new ColorMatrixFilter([1,0,0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, _alpha, 0]);
this.material.texture.applyFilter(this.material.bmpd, this.material.bmpd.rect, new Point(0, 0), cmf);
}
public function set alpha(v:Number):void{
if(!this.visible)return;
_alpha=((v<0)?0:v);
cmf=new ColorMatrixFilter([1,0,0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, _alpha, 0]);
this.material.texture.applyFilter(this.material.bmpd, this.material.bmpd.rect, new Point(0, 0), cmf);
}
public function get alpha(){
return _alpha;
}
public function dipose_bmpd(){
this.material.bmpd.dispose();
}
ファイル名:BitmapMaterial.as
変数を宣言
public var bmpd:BitmapData;
コンストラクタの該当部分を下記のようにする
if( asset ){
texture = asset;
this.bmpd=asset.clone();
}