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

FLARToolkit アリスのピープショー(モノクローム版)

アリスのピープショー(グレースケール)
Copyright(c) since 2010 Nekyo.
flartoolkit SimpleCube ベースのサンプル
Flarマーカをかざすと、アリスのピープショーが表示されます。
カラー版は N's Gallery (http://nsgalle.appspot.com) で公開中。
@licence: GPL v3 http://www.gnu.org/licenses/gpl.html
Flar マーカーをさくーしゃさんのサイトから http://saqoosha.net/lab/FLARToolKit/flarlogo-marker.pdf

ビットマップ読み込み用インクルード
Get Adobe Flash player
by Nekyo 20 Apr 2010
/**
 * Copyright Nekyo ( http://wonderfl.net/user/Nekyo )
 * GNU General Public License, v3 ( http://www.gnu.org/licenses/quick-guide-gplv3.html )
 * Downloaded from: http://wonderfl.net/c/bs2h
 */

package {
	/**
	 * アリスのピープショー(グレースケール)
	 * Copyright(c) since 2010 Nekyo.
	 * flartoolkit SimpleCube ベースのサンプル
	 * Flarマーカをかざすと、アリスのピープショーが表示されます。
	 * カラー版は N's Gallery (http://nsgalle.appspot.com) で公開中。
	 * @licence: GPL v3 http://www.gnu.org/licenses/gpl.html
	 * Flar マーカーをさくーしゃさんのサイトから http://saqoosha.net/lab/FLARToolKit/flarlogo-marker.pdf
	 */
	import flash.events.Event;
	import flash.events.IOErrorEvent;
	import flash.events.MouseEvent;

	import org.papervision3d.lights.PointLight3D;
	import org.papervision3d.materials.WireframeMaterial;
	import org.papervision3d.materials.shadematerials.FlatShadeMaterial;
	import org.papervision3d.materials.utils.MaterialsList;
	import org.papervision3d.objects.primitives.Plane;

	import org.libspark.flartoolkit.example.PV3DARApp;

	// ビットマップ読み込み用インクルード
	import org.papervision3d.materials.BitmapMaterial;
	import flash.display.Bitmap;
	import flash.display.BitmapData;

	[SWF(width=640, height=480, backgroundColor=0xffffff, frameRate=30)]

	import flash.net.URLLoader;
	import flash.net.URLRequest;
	import flash.display.Loader;
	import flash.system.LoaderContext;

	import flash.net.navigateToURL;
	import flash.system.Security;
	import flash.system.SecurityPanel;
	import flash.media.Camera;
		
	public class Alice extends PV3DARApp {
		private var _plane:Plane;
		// 対象画像のURL
		private	const image_url:Array = [
			'http://lh5.ggpht.com/_XAjHEdaLqjE/S82nCSiKVFI/AAAAAAAAAGw/8zPesbWn8pg/alice1.png',
			'http://lh5.ggpht.com/_XAjHEdaLqjE/S82nCq7JBmI/AAAAAAAAAG0/ix7SCmzIu6c/alice2.png',
			'http://lh4.ggpht.com/_XAjHEdaLqjE/S82nCtOICLI/AAAAAAAAAG4/1UMP8a4FUmk/alice3.png',
			'http://lh5.ggpht.com/_XAjHEdaLqjE/S82nCv75drI/AAAAAAAAAG8/jKZzLmFsYkg/alice4.png',
			'http://lh4.ggpht.com/_XAjHEdaLqjE/S82nCz2DB1I/AAAAAAAAAHA/uVnZExM2djM/alice5.png',
			'http://lh4.ggpht.com/_XAjHEdaLqjE/S82nOyG_ppI/AAAAAAAAAHM/wS5fcF6I3Pk/alice6.png',
		];

		/**
		 * コンストラクタ
		 */
		public function Alice() {
			var camera:Camera = Camera.getCamera();
			if (!camera) {
				// これを実行すると wonderfl のキャプチャーがされない。
				Security.showSettings(SecurityPanel.CAMERA);
			} else {
				Wonderfl.capture_delay(5);
				// カメラ補正ファイルとパターン定義ファイルのファイル名を渡して初期化。
				addEventListener(Event.INIT, _onInit);
				init(
					'http://assets.wonderfl.net/static/flar/camera_para.dat',
					'http://assets.wonderfl.net/static/flar/flarlogo.pat'
				);
			}
		}

		/**
		 * 画像読み込み完了イベント処理
		 * @param e イベント
		 */
		private function initHandler(event:Event):void
		{
			var loader:Loader = event.target.content.parent;
			var depth:int = 0;
			for (var i:int = 0; i < image_url.length; i++) {
				if (image_url[i] == loader.contentLoaderInfo.url) {
					depth = i;
					break;
				}
			}

			var bitmap:Bitmap = event.target.content as Bitmap;
			//bitmap.smoothing = true;

			// 単純に読み込んだ画像分、z深度を変えてプレーンを作って
			// 貼るだけ。
			var wmat:BitmapMaterial;
			var dist:int = 30;					// z方向の数
			wmat = new BitmapMaterial(bitmap.bitmapData, true);
			wmat.doubleSided = true;
			_plane = new Plane(wmat, 100, 100); // 100mm x 100mm。(マーカー1辺 80mmとしたとき。)
			_plane.rotationX = 180;
			_plane.rotationZ =  90;
			_plane.z = (7 - depth) * dist;		// Z方向のディスタンス
			_markerNode.addChild(_plane);		// _markerNode に addChild するとマーカーに追従する。
		}
 
		/**
		 * イニシャライザ
		 * @param e イベント
		 */
		private function _onInit(e:Event):void {
			// 画像をまとめて読み込む。
			// wonderfl に画像を置ければ [Embed が使えるのに...
			for (var i:int = 0; i < image_url.length; i++) {
				var loader:Loader = new Loader();
				loader.contentLoaderInfo.addEventListener(Event.COMPLETE, initHandler);
				loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onIOerror);
				loader.load(new URLRequest(image_url[i]), new LoaderContext(true));
			}
			stage.addEventListener(MouseEvent.CLICK, _onClick);
		}

		/**
		 * IOエラー
		 * @param	e
		 */
		private function onIOerror(e:IOErrorEvent):void {
			trace("IO Error." + e.toString());
		}

		/**
		 * クリック時の処理
		 * @param e イベント
		 */
		private function _onClick(e:MouseEvent):void {
			//	mirror = !mirror;	// 反転なんていらないっす。っていうか鏡の国のアリス?
			// 画面がクリックされたら新規ウィンドウでN'sギャラリーでも立ち上げますか。
			navigateToURL(new URLRequest("http://nsgalle.appspot.com/"), "_blank");

		}
	}
}