In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

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);
		});
	}
}
}