Sealyu

          --- 博客已遷移至: http://www.sealyu.com/blog

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            618 隨筆 :: 87 文章 :: 225 評論 :: 0 Trackbacks
          <2008年12月>
          30123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          常用鏈接

          留言簿(14)

          隨筆分類

          隨筆檔案

          友情鏈接

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          http://kevincao.com/2008/11/05/experiment02-earth-fire/
          主要演示了pv3d新版本的渲染層機制的一些知識點,和BitmapEffectLayer。以下是主要代碼:

          public function init3D() : void {
          camera.fov = 55;

          //設置一個空物體作為兩個球體的父對象
          dummy = new DisplayObject3D();

          //添加燈
          light = new PointLight3D();
          scene.addChild(light);

          //添加一個噪波作為貼圖
          var bitmap : BitmapData = new BitmapData(256, 256, false, 0);
          bitmap.perlinNoise(64, 64, 2, Math.random() * 3000, false, false, 7, true);

          //環境貼圖需要一個光源
          var mat : EnvMapMaterial = new EnvMapMaterial(light, bitmap);

          var s1 : Sphere = new Sphere(mat, 80, 8, 8);
          s1.x = 300;
          s1.z = -100;

          //使用地球圖片做紋理貼圖
          var s2 : Sphere = new Sphere(new BitmapMaterial(image.bitmapData), 120, 12, 12);
          s2.x = -400;
          s2.z = 100;

          //把球體添加到空物體中
          dummy.addChild(s1);
          dummy.addChild(s2);

          scene.addChild(dummy);

          //DisplayObject3D(簡稱do3d)的層次結構和渲染對應的結構是分開的,接下來設置渲染的層次結構
          //默認情況下do3d渲染到viewport.containerSprite中
          //containerSprite是一個ViewportBaseLayer對象,繼承自ViewportLayer,也是一個Sprite

          //BitmapEffectLayer原先是Effect分支里的功能,現在整合到Great White里面來了
          //把do3d渲染到BitmapEffectLayer可以添加一些Bitmap濾鏡效果
          var bfx : BitmapEffectLayer = new BitmapEffectLayer(viewport, 500, 500);
          //ViewportLayer對象必須用addLayer語句添加到containerSprite
          viewport.containerSprite.addLayer(bfx);

          //把球體加進bfx層,記住do3d的層次結構和渲染對應的圖層結構是分開的
          //所以我們不能直接把dummy加進bfx層,這樣dummy的子對象是不被一同加入的
          bfx.addDisplayObject3D(s1);
          bfx.addDisplayObject3D(s2);

          //火焰效果很簡單,添加一個效果對象就可以了
          bfx.addEffect(new BitmapFireEffect(1, 1, 1, 1));

          //effects數組可以索引屬于圖層的效果對象
          bfx.effects[0].flameHeight = 1;

          //設置bitmap每幀的移動量
          bfx.setScroll(4, 3);

          //出于CPU占用考慮,一般不會用很大的位圖來生成效果。一種可用的做法是只把效果渲染到一塊較小的區域內
          //BitmapEffectLayer.setTracking(do3d)用于讓圖層跟隨某個do3d在屏幕上的位置移動
          //但先要允許do3d自動計算自身的屏幕坐標。例如:
          //s1.autoCalcScreenCoords = true;
          //bfx.setTracking(s1);

          //添加遮罩層
          var msk : Sprite = new Sprite();
          msk.graphics.beginFill(0xFF0000);
          msk.graphics.drawCircle(0, 0, 250);
          msk.graphics.endFill();
          //containerSprite既然繼承自Sprite,那么自然可以用addChild來新增圖層
          viewport.containerSprite.addChild(msk);

          //現在在containerSprite下面有兩個圖層,我們可以設置遮罩
          bfx.mask = msk;

          //添加外邊框作為修飾
          var frame : Sprite = new Sprite();
          frame.graphics.lineStyle(10, 0×222222);
          frame.graphics.drawCircle(0, 0, 250);
          viewport.containerSprite.addChild(frame);

          addEventListener(Event.ENTER_FRAME, tick);
          }

          相關文章

          posted on 2008-12-06 23:39 seal 閱讀(781) 評論(0)  編輯  收藏 所屬分類: Flex+ActionScript
          主站蜘蛛池模板: 林芝县| 高陵县| 博客| 彭泽县| 福海县| 罗平县| 衢州市| 五指山市| 巨鹿县| 偏关县| 莱芜市| 林州市| 南川市| 清水河县| 辽阳县| 逊克县| 晋江市| 嘉荫县| 大化| 贡嘎县| 方城县| 陈巴尔虎旗| 扶绥县| 鸡西市| 卓尼县| 资中县| 万年县| 武安市| 九龙坡区| 阜阳市| 平昌县| 保德县| 武平县| 五家渠市| 启东市| 扶绥县| 张家界市| 双流县| 库尔勒市| 黄浦区| 龙江县|