Away3D 4.0 Beta をちょっとさわってみました
先日 Stage3D本 も届いたことだし、ちょっとだけ Away3D 4.0 Beta をさわって遊んでみたら、こんなのが出来ました。
画像クリックでデモ画面が開きます。
※ FlashPlayer 11 および GPU レンダリングが出来る PC が必要です(たぶん)
ちなみに負荷など何も考えずこれだけ適当に作っているのに、僕の環境では「MacPro 2008 で 58〜60 fps」「MacBook Air 2011 で 35〜40 fps」程度のフレームレートで動作しました。
(MacBook Air 2011 は再起動したら MacPro と同様に 58〜60 fps 出るようになりました。)
今回のコードはこんな感じ。
package { import away3d.cameras.Camera3D; import away3d.containers.Scene3D; import away3d.containers.View3D; import away3d.debug.AwayStats; import away3d.entities.SegmentSet; import away3d.filters.BloomFilter3D; import away3d.filters.DepthOfFieldFilter3D; import away3d.filters.MotionBlurFilter3D; import away3d.primitives.LineSegment; import away3d.primitives.WireframeGrid; import flash.display.Sprite; import flash.events.Event; import flash.geom.Vector3D; import flash.utils.getTimer; [SWF(backgroundColor="#C0C0C0", frameRate="60", width="800", height="600")] public class DrawLine extends Sprite { private var _view : View3D; private var _scene : Scene3D; private var _camera : Camera3D; private var _lines:SegmentSet; public function DrawLine() { setup(); addEventListener(Event.ENTER_FRAME, update); } private function setup():void { _view = addChild(new View3D()) as View3D; _view.antiAlias = 6; _view.backgroundColor = 0; var lens:PerspectiveLens = new PerspectiveLens( 90 ); _view.camera.lens = lens; _scene = _view.scene; _camera = _view.camera; _lines = new SegmentSet(); _scene.addChild( _lines ); var plane:WireframeGrid = new WireframeGrid(10, 3000 , 2, 0x30FF99); _scene.addChild(plane); var motionBlur:MotionBlurFilter3D = new MotionBlurFilter3D(.95); var dofBlur:DepthOfFieldFilter3D = new DepthOfFieldFilter3D( 2, 2); var bloom:BloomFilter3D = new BloomFilter3D( 16, 16, .75, 3, 3); _view.filters3d = [motionBlur, bloom]; var awayStats:AwayStats = new AwayStats(_view); addChild(awayStats); } private var _currentV3D:Vector3D = new Vector3D(); private var _segList:Array = []; private function update(e:Event) : void { if( _segList.length > 5000 ) { _lines.removeAllSegments(); _segList = []; } var v3D:Vector3D = new Vector3D( (Math.random() * 2500 - 1250) | 0, (Math.random() * 1500) | 0, (Math.random() * 2500 - 1250) | 0); var seg:LineSegment = new LineSegment( _currentV3D, v3D, Math.random() * 0xFFFFFF | 0, Math.random() * 0xFFFFFF | 0, 1 ) _lines.addSegment( seg ); _segList.push( seg ); _currentV3D = v3D; _camera.x = 1000 * Math.sin(getTimer() / 2000); _camera.z = 2500 * Math.cos(getTimer() / 2000); _camera.y = 1000 * Math.sin(getTimer() / 5000) - 200; _camera.lookAt(new Vector3D()); _view.render(); } } }
これは簡単ですね。
この Away3D は、6月6日放送の ADC OnAir で 池田さんがおっしゃっていたように、PV3D を使ったことがある方ならすぐに馴染めそうです。
そしてこの仕組みを使えば、AR.Drone の飛行ルートを3次元空間上にトレースできそうなので、ちょっとニヤニヤしてしまいますよね。
ということで…
本も買ったことだし、これからは今まで微妙に避けていた 3D にも積極的に取り組んでいきたいと思います。