BitmapMaterialのtiledを使って画像を繰り返し敷き詰める
Papervision3d の BitmapMaterial の tiled 機能を利用して
画像をテクスチャとして敷き詰めます。
左上に表示中の画像が利用する素材です。
これを5×5のサイズで立方体の面に貼り付けています。
キーワードは tiled, maxU, maxV です。
/**
* Copyright nitoyon ( http://wonderfl.net/user/nitoyon )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/wpg7
*/
// Papervision3d の BitmapMaterial の tiled 機能を利用して
// 画像をテクスチャとして敷き詰めます。
//
// 左上に表示中の画像が利用する素材です。
// これを5×5のサイズで立方体の面に貼り付けています。
// キーワードは tiled, maxU, maxV です。
package {
import flash.display.*;
import flash.events.Event;
import flash.utils.ByteArray;
import org.papervision3d.objects.primitives.*;
import org.papervision3d.view.*;
import org.papervision3d.materials.*;
import org.papervision3d.materials.utils.MaterialsList;
import mx.utils.Base64Decoder;
[SWF(backgroundColor="#000000", width="475", height="475")]
public class TextureTest extends BasicView {
// 表示する立方体
private var cube:Cube;
// 画像を BASE64 エンコードしたもの
private static var ImageBase64:String = "R0lGODlhEAAQAJkAAOdfEwAAAPDQsAAAACH5BAAAAAAALAAAAAAQABAAAAI2hI4XhgYPXxBxxkqhvTJ33i0fuATm4l1TsnEt8GIymZ5uCiviqFG6ictBEDGhCmeCnZKCZbIAADs=";
public function TextureTest(){
// 画像をロードして BitmapData に変換する
// 変換後、loadComplete 関数が呼ばれる
base64ToBitmapData(ImageBase64, loadComplete);
}
private function loadComplete(bmd:BitmapData):void{
// 表示するテクスチャを右上に表示
addChild(new Bitmap(bmd));
// BitmapMaterial に BitmapData を渡す
var m:BitmapMaterial = new BitmapMaterial(bmd, true);
// tiled を true に、maxU, maxV に敷き詰める数を渡す
m.tiled = true;
m.maxU = 5;
m.maxV = 5;
// Cube の面に貼り付ける
cube = new Cube(new MaterialsList({all:m}));
scene.addChild(cube);
// 描画を開始する
startRendering();
}
protected override function onRenderTick(e:Event = null):void{
cube.rotationX += 1;
cube.rotationY += .8;
super.onRenderTick(e);
}
private function base64ToBitmapData(base64:String, callback:Function):void{
var decoder:Base64Decoder = new Base64Decoder();
decoder.decode(base64);
var bytes:ByteArray = decoder.toByteArray();
bytes.position = 0;
var loader:Loader = new Loader();
loader.loadBytes(bytes);
var bmd:BitmapData = new BitmapData(16, 16);
loader.contentLoaderInfo.addEventListener("complete", function(event:Event):void{
var bmd:BitmapData = new BitmapData(loader.width, loader.height);
bmd.draw(loader);
callback(bmd);
});
}
}
}