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 出るようになりました。)
今回のコードはこんな感じ。
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | 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 にも積極的に取り組んでいきたいと思います。