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 にも積極的に取り組んでいきたいと思います。

