2012年10月8日 星期一

Away3D + Flint 3D Particles Demo: Cloud Effect

Away3D + Flint 3D Particles Demo: Cloud(Fog) Effect

版本:
Away3D v4.0.9
Flint v4.0.1

先來看 demo 圖

重點如下:
建立: view = new View3D();
設定背景: view.backgroundColor = 0x222233;
設定 antiAlias(ie: 2,4,16): view.antiAlias = 4; 


v4 版本後已經沒有 HoverCamera3D,
改由 HoverController 來控制 camera,
改變 cameraController.panAnglecameraController.tiltAngle
來產生旋轉及放大縮小的 3D 效果。
cameraController = new HoverController(camera, null, 45, 20);

光源: sunLight = new DirectionalLight();
陰影: sunLight.castsShadows = true;
照射方向: sunLight.direction = new Vector3D(-1, -1, -1); // 光線往 -1, -1, -1 的方向照射

skybox(360 度環繞場景)
產生六個面的 CubeTexture:
cubeTexture = new BitmapCubeTexture(Cast.bitmapData(EnvPosX), Cast.bitmapData(EnvNegX), Cast.bitmapData(EnvPosY), Cast.bitmapData(EnvNegY), Cast.bitmapData(EnvPosZ), Cast.bitmapData(EnvNegZ))
建立: skybox = new SkyBox(cubeTexture);

貼圖材質加上陰景
一般陰影
texture_floor.shadowMethod = new FilteredShadowMapMethod(sunLight);
不這麼銳利
texture_floor.shadowMethod = new DitheredShadowMapMethod(sunLight);
不要有反射
texture_floor.specular = 0;

載入 3D 物件
開啟自動偵測,自動把相關的貼圖材質全都載入: Parsers.enableAllBundled();
建立: _loader = new Loader3D();
設定大小: _loader.scale(2);
監聽事件,全都載入完成後,會送出 RESOURCE_COMPLETE 事件。
_loader.addEventListener(LoaderEvent.RESOURCE_COMPLETE, onResourceComplete);
_loader.addEventListener(LoaderEvent.LOAD_ERROR, onLoadError);
_loader.load(new URLRequest(BASE_URL + 'assets/3d/ship.awd'));
載入完成後加到 _objContainer,
_objContainer = new ObjectContainer3D();
_objContainer.addChild(_loader);
載入的材質要加上燈光效果,這裡用 LightsHelper 輔助,省去不少麻煩。
var lights:Vector.<LightBase> = new Vector.<LightBase>(2);
lights[0] = sunLight;
lights[1] = plight;
LightsHelper.addStaticLightsToMaterials(_loader, lights);

接下來是 Flint 的部份,加上雲霧效果,基本上跟 2D 的用法一樣,
可以回顧一下前幾篇文章教學,
emitter = new EmitterSmoke();
emitter.start();
建立粒子 Container:
particleContainer = new ObjectContainer3D();
scene.addChild(particleContainer);
建立 Away3D render: particleRenderer = new A3D4Renderer(particleContainer);
加入 emitter: particleRenderer.addEmitter(emitter);

粒子是用 Away3D A3D4DisplayObjects,
建立粒子:

addInitializer(new A3D4DisplayObjects([
        new Bitmap(new Materials().cloud1),
        new Bitmap(new Materials().cloud2),
        new Bitmap(new Materials().cloud3),
        new Bitmap(new Materials().cloud4)],
    null, true, 500));

設定粒子的屬性: 移動方向,速度,生命週期,大小...等

另外,這個版本的 Away3D 移除 AnimatedBitmapMaterial 及 BitmapMaterial Class,
造成 compiler 出錯,小修改 A3D4DisplayObjects.as 修正這個問題。

[ref]
Nice 3D model by SolCommand
Create cloud reference http://wonderfl.net/c/h9dR
Skybox map reference https://github.com/away3d/away3d-examples-fp11/
Thanks all~~

沒有留言:

張貼留言