- 2008年12月 3日 22:36
- ActionScript 3.0
FlashPlayer10になって、displayobjectに3dが扱えるようになりました。これによってzやrotationX/Y/Zなどの3d関連プロパティが追加されました。
さて、3dといえば、消失点です。wikipediaを見ると、以下のように解説されています。
多くの透視図には消失点 (vanishing point) が存在する。一点透視図法とは水平線上に1つの消失点を持つものであり、視界に存在するすべての平行な直線は、距離に比例してこの消失点へと近づいていき、やがて消える。まっすぐ地平線の彼方へと消える2本の線路を想像すればわかりやすいだろう。
as3的にかみ砕いて言えば、消失点を調整すればdisplayObjectのzを高めたときに、その点のx,y座標に向かって遠ざかっていき、最終的に消えます。
PerspectiveProjection.projectionCenter
as3でこの消失点にアクセスするには、ルートのDisplayObjectContainerのperspectiveProjectionプロパティ->projectionCenterを参照します。このプロパティ自体はdisplayObjectから継承されている物ですが、ルート以外のインスタンスには参照できないことに気をつけてください。このプロパティはPointに型指定されており、x/y座標をもっています。 デフォルト値は、250,250になります。 以下は、PerspectiveProjection.projectionCenterとZの関係を示すSWFとソースです。 perspectiveProjection for ActionScript 3.0
//初期設定
var maxZ:int = 8000;//最大Z
/*MovieClipの生成と調整*/
var ex:MovieClip = new MovieClip();
ex.graphics.beginFill(0x555555);
ex.graphics.drawCircle(0,0,500);
addChild(ex);//表示
ex.x = ex.stage.stageWidth/2;//中央に配置
ex.y = ex.stage.stageHeight/2;
ex.z = maxZ;//zを最大値に
/*perspectiveProjectionを参照*/
var perspectiveProjection:PerspectiveProjection = ex.root.transform.perspectiveProjection;
/*デバッグ用TextFieldの生成と調整*/
var textField:TextField = new TextField();
textField.textColor = 0xFF0000
textField.autoSize = TextFieldAutoSize.LEFT;
addChild(textField)
addEventListener(Event.ENTER_FRAME,enterFrameHandler);
function enterFrameHandler(e:Event):void{
/*マウス位置座標とステージの%参照*/
var mouseXPositionPercent = (this.stage.mouseX/this.stage.stageWidth);
var mouseYPositionPercent = (this.stage.mouseY/this.stage.stageHeight);
/*perspectiveProjection.projectionCenterを再設定*/
perspectiveProjection.projectionCenter = new Point(this.stage.stageWidth*mouseXPositionPercent,this.stage.stageHeight*mouseXPositionPercent)
/*アニメーション*/
ex.z = (maxZ*mouseYPositionPercent);
ex.rotationX = ex.rotationY += -10
/*デバッグ*/
textField.text = String("projectionCenter : "+perspectiveProjection.projectionCenter+"\n"+"x : "+ex.x+"\n"+"y : "+ex.y+"\n"+"z : "+ex.z)
}



