FP10で3D (2)
Posted by ton in AS3, Flash on 02 7th, 2009| icon3No Comments »

前回はDisplayObjectクラスのプロパティをちょこっといじっただけだったので、
今回はPerspectiveProjectionクラスをいじってみます

PerspectiveProjectionクラスってのは遠近法を簡単に適応するクラスらしい
このクラスのプロパティは3つ

・fieldOfView
Number
0 < fieldOfView < 180
遠近法による変形と歪みの強さを決めるプロパティ
値を大きくすると魚眼レンズみたいになる

・focalLength
Number
焦点距離を表すプロパティ
視点の原点(0,0,0)とz軸上のオブジェクトとの間の距離を表す
値が大きいと望遠鏡のように、小さいと魚眼レンズのようになる

・projectionCenter
Point
遠近法の消失点を表すプロパティ

fieldOfViewとfocalLengthは互いに依存してるので片方変更するともう片方も変更するらしい
fieldOfViewを変更したときのfocalLengthは次の式で計算される
focalLength = stageWidth/2 * (cos(fieldOfView/2) / sin(fieldOfView/2)

デフォルトでは次の値になる
• fieldOfView:55
• perspectiveCenter:stagewidth/2, stageHeight/2
• focalLength:stageWidth/ 2 * ( cos(fieldOfView/2) / sin(fieldOfView/2) )

とりあえずPerspectiveProjectionを使ってなんか作ってみる
wonderflのほうが公開するの楽なんでwonderflに書きますw

長細い線みたいなのがビュンビュン飛んでるけど、実は正方形
PerspectiveProjectionのfieldOfViewの値を大きくして魚眼レンズのようにしている
projectionCenterは常にマウスの座標になるようにしている
これだけでおもしろくなるもんだなぁ

次はMatrix3Dを使ってみる

このエントリーを含むはてなブックマークはてなブックマーク - FP10で3D (2) この記事をクリップ!Livedoorクリップ - FP10で3D (2) BuzzurlにブックマークBuzzurlにブックマーク FC2ブックマークへ追加 Bookmark this on Delicious Digg This
FP10で3D (1)
Posted by ton in AS3, Flash, 作ってみた on 02 7th, 2009| icon3No Comments »

せっかくFP10で3Dの概念が追加されたんだから3Dやってみようってことで

FP10で追加された3Dの機能

・flash.display.DisplayObject クラス
z プロパティやscaleZ
rotationX,rotationY,rotationZなどの各軸の回転角
3次元座標を2次元に変換するlocal3DToGlobal() メソッド が追加された

・flash.geom.Vector3D クラス
3次元座標を格納するクラス
回転角も入れたりできる
※Vectorクラスとは違います Vectorクラスはすべてのエレメントが同じデータ型を持つ配列で、Vector3Dクラスは3次元空間のベクトルを表すクラスです

・flash.geom.Matrix3D クラス
回転、拡大、縮小、平行移動などの3Dの変換を行うクラス

・flash.geom.PerspectiveProjection クラス
遠近法に基づく変形を行うクラス

とりあえずくるくる回転するだけの物を作ってみた

Flash Player 10 にしてください


package {
	import flash.display.Sprite;
	import flash.events.Event;

	public class Study3d1 extends Sprite {
		private const SIZE:int = 100;
		private const W:int = stage.stageWidth;
		private const H:int = stage.stageHeight;
		private var mc:Sprite;
		public function Study3d1():void {
			mc = new Sprite();
			mc.graphics.beginFill(0x0077ff);
			mc.graphics.drawRect(-SIZE/2, -SIZE/2, SIZE, SIZE);
			mc.graphics.endFill();
			mc.x = W / 2;
			mc.y = H / 2;
			addChild(mc);

			addEventListener(Event.ENTER_FRAME, onEnterFrameHandler);
		}

		private function onEnterFrameHandler(e:Event):void {
			mc.rotationX = H / 2 - mouseY;
			mc.rotationY = W / 2 - mouseX;
		}
	}
}

おー回ってる回ってる
次はもちっと複雑な動きをする物を作ってみたいと思います

このエントリーを含むはてなブックマークはてなブックマーク - FP10で3D (1) この記事をクリップ!Livedoorクリップ - FP10で3D (1) BuzzurlにブックマークBuzzurlにブックマーク FC2ブックマークへ追加 Bookmark this on Delicious Digg This