<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-31  評(píng)論-257  文章-0  trackbacks-0
          近來在學(xué)習(xí)Flash的3D技術(shù),現(xiàn)在我看過的就PV3D 與Away3D這兩個(gè)開源框架,感覺還不錯(cuò),好像Away3D的效果好點(diǎn),但效率不如PV3D,PV3D算是亻為(不會(huì)用五筆打這個(gè)字-_-,我機(jī)子里又沒拼音輸入,將就下吧!)3D,不管這么多了,做個(gè)東西練練手,先看效果:



    [url=http://www.jiangzone.com.cn/jiang/3dmusic/soundtest.swf]這里看看效果![/url]

        這個(gè)程序很簡單到?jīng)]無簡單了,就只是用了PV3D框架中的Cube的3D對(duì)象,一口氣生成64個(gè)放在數(shù)組里待用,之后用Flash里的聲音類加載并播放聲音,之后在ENTER_FRAME事件里檢測當(dāng)前聲音的頻譜,之后根據(jù)頻譜的高低來調(diào)整Cube格子的高低,在Flash里獲取的聲音頻譜有512個(gè)Float數(shù)據(jù),代表512級(jí)頻譜,而前256級(jí)為LeftChangle,后256級(jí)為RightChangle,由于如果生成256個(gè)3D對(duì)象的話,對(duì)CPU來說是個(gè)考驗(yàn),所以就折中間隔抽取64個(gè)頻段來顯示,由于懶于寫代碼了,就只寫了LeftChangle的頻譜。

        以下是代碼:
      1 //************導(dǎo)入需要用到的類
      2 import flash.display.Sprite;
      3 import org.papervision3d.scenes.Scene3D;
      4 import org.papervision3d.cameras.FreeCamera3D;
      5 import org.papervision3d.objects.Cube;
      6 import org.papervision3d.materials.MaterialsList;
      7 import org.papervision3d.materials.WireframeMaterial;
      8 import org.papervision3d.materials.ColorMaterial;
      9 import org.papervision3d.cameras.Camera3D;
     10 import     org.papervision3d.objects.Plane;
     11 
     12 //************定義需要用到的對(duì)象
     13 var cont:Sprite;
     14 var scene:Scene3D;
     15 var camera:FreeCamera3D;
     16 var ml:MaterialsList;
     17 var material:ColorMaterial;
     18 var cubeArr:Array;
     19 
     20 //***********設(shè)置放置3D東東的容器
     21 cont = new Sprite();
     22 cont.x = 150;
     23 cont.y = 120;
     24 this.addChild(cont);
     25 
     26 //******設(shè)置一個(gè)3D場景,并設(shè)置好Camera的位置與角度
     27 scene = new Scene3D(cont);
     28 camera = new FreeCamera3D();
     29 camera.z = 1200;
     30 camera.x = 100;
     31 camera.y = 700;
     32 camera.rotationX = -30;
     33 camera.rotationY = 180;
     34 camera.focus = 100;
     35 camera.zoom = 10;
     36 
     37 //***********定義一個(gè)存放所有格子的數(shù)組
     38 cubeArr = new Array();
     39 
     40 //定義一個(gè)顏色材質(zhì)與材質(zhì)列表,用于應(yīng)用于格子的6個(gè)面的貼圖
     41 material = new ColorMaterial(0x096288);
     42 ml = new MaterialsList();
     43 ml.addMaterial(material,"front");
     44 ml.addMaterial(material,"back");
     45 ml.addMaterial(material,"top");
     46 ml.addMaterial(material,"bottom");
     47 ml.addMaterial(material,"left");
     48 ml.addMaterial(material,"right");
     49 
     50 var i:int = 0;
     51 var j:int = 0;
     52 
     53 //生成64個(gè)小格子并排列好位置
     54 for(;i<64;i++){
     55     ml.addMaterial(new ColorMaterial(0xB9DFCF),"top");
     56     var c:Cube = new Cube(ml,20,20,20);
     57     c.x = (i % 8* (20 + 5);
     58     c.z = (j % 8* (20 + 5);
     59     (i % 8 == 0? j++:j=j;
     60     cubeArr[i] = c;
     61     scene.addChild(c);
     62 }
     63 
     64 //創(chuàng)建一個(gè)面板,設(shè)置好位置放在小格子隊(duì)列的下面(地板)
     65 var plane:Plane = new Plane(new WireframeMaterial(0xaaaaaa),300,300,7,7);
     66 plane.rotationX = -90;
     67 plane.y = -50;
     68 plane.x = 70;
     69 plane.z = 60;
     70 scene.addChild(plane);
     71 
     72 //以上是3D部分,以下是聲音部分
     73 //建立一個(gè)字節(jié)數(shù)組用于存放獲取到的頻譜信息
     74 var bArr:ByteArray = new ByteArray();
     75 //讀取聲音文件并播放
     76 var req:URLRequest = new URLRequest("a.mp3");
     77 var sound:Sound = new Sound(req);
     78 sound.play();
     79 
     80 //添加一個(gè)事件偵聽器
     81 this.addEventListener(Event.ENTER_FRAME,onEnter);
     82 
     83 function onEnter(e:Event):void{
     84     //獲取當(dāng)前聲音頻譜,將數(shù)據(jù)存放在bArr里面。
     85     //true為頻譜模式,0為采樣率代號(hào)
     86     SoundMixer.computeSpectrum(bArr,true,0);
     87     i=0;
     88     //讀取前256個(gè)數(shù)據(jù),即Left聲道的頻譜
     89     for(;i<256;i++){
     90         var temp:Number = bArr.readFloat();
     91         //間隔4個(gè)數(shù)據(jù)中獲取一個(gè)顯示
     92         if(i % 4 == 0){
     93             //從數(shù)組中獲取相應(yīng)的格子
     94             var c:Cube = cubeArr[i/4] as Cube;
     95             //設(shè)置格子在三維坐標(biāo)中的高。
     96             //由于頻譜數(shù)據(jù)是0-1,所以將其放大100倍
     97             c.y = temp * 100;
     98         }
     99     }
    100     //鏡頭旋轉(zhuǎn)移動(dòng)
    101     camera.moveLeft(12);
    102     camera.rotationY += 0.6;
    103     scene.renderCamera(camera);
    104 }



    posted on 2008-07-29 14:16 姜大叔 閱讀(1464) 評(píng)論(1)  編輯  收藏 所屬分類: Flash/Flex

    評(píng)論:
    # re: 一群會(huì)跟著聲音跳舞的3D格子![未登錄] 2009-03-26 10:53 | wei
    偽=wyly  回復(fù)  更多評(píng)論
      
    主站蜘蛛池模板: 毛片在线看免费版| 亚洲黄色免费观看| 亚洲综合色视频在线观看| 亚洲av无码兔费综合| 免费高清资源黄网站在线观看| 亚洲mv国产精品mv日本mv| 免费在线观看h片| 亚洲一卡2卡3卡4卡国产网站| 99爱在线精品免费观看| 亚洲日本乱码卡2卡3卡新区| 猫咪社区免费资源在线观看| 亚洲午夜无码毛片av久久京东热| 无码视频免费一区二三区| 亚洲国产精品18久久久久久| vvvv99日韩精品亚洲| 巨胸喷奶水视频www免费视频| 亚洲精品国产美女久久久| 免费视频精品一区二区三区 | 一级做a爰片久久毛片免费陪 | 女人18一级毛片免费观看| 国产亚洲视频在线观看| 亚洲精品无码专区2| a视频免费在线观看| 亚洲日韩乱码中文无码蜜桃臀| 免费精品人在线二线三线区别| 久久精品国产亚洲AV电影网| 国产亚洲美女精品久久久| 最近中文字幕mv免费高清视频8| 狠狠色伊人亚洲综合网站色| 亚洲av午夜精品一区二区三区| 精品免费久久久久国产一区| 久久青青草原亚洲av无码app | 中国人免费观看高清在线观看二区| 亚洲a一级免费视频| 国产成人无码免费看视频软件 | 亚洲天堂视频在线观看| 在线观看AV片永久免费| 无码的免费不卡毛片视频| 亚洲自偷自拍另类图片二区| 少妇亚洲免费精品| 99在线在线视频免费视频观看|