Sealyu

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

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            618 隨筆 :: 87 文章 :: 225 評論 :: 0 Trackbacks
          <2008年11月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          30123456

          常用鏈接

          留言簿(14)

          隨筆分類

          隨筆檔案

          友情鏈接

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          DDM君,Flab3D.com (允許轉載,轉載請注明)

            所有PV3D三維模型都是繼承至DisplayObject3D類,所以所有三維模型都有同樣的移動,旋轉,縮放的方法/屬性。(如果不理解什么叫繼承可以無視這句話=_=)講這句的意思是“攝像機這些也是DisplayObject3D”,所以也可以做同樣的操作。

          我們第一篇的小球在這里不是特別能明顯表示下面的區別。所以我們這次用個立方體Cube。

          原理介紹:

          先記下上面這個圖,它保證我們不迷失在三維的世界里,如果你正好是maya,3dsmax的使用,恭喜你!和里面的道理一模一樣。

          移動:
          cube.x  //物體在世界坐標的X軸位置
          cube.y  //物體在世界坐標的Y軸位置
          cube.z  //物體在世界坐標的Z軸位置
          pv3d的三維坐標 圖1

          cube.moveForward(一定距離) //向物體本地Z的正方向移動
          cube.moveBackward(一定距離) //向物體本地Z的負方向移動
          cube.moveDown(一定距離)//向物體本地Y的負方向移動
          cube.moveUp(一定距離)//向物體本地Y的正方向移動
          cube.moveLeft(一定距離)//向物體本地X的負方向移動
          cube.moveRight(一定距離)////向物體本地X的正方向移動

          這兩種有什么區別呢?其實就是world和local坐標系的區別,上面那張圖應該能幫助您理解。

          旋轉:
          cube.rotationX  //物體繞世界坐標的X軸,順時針旋轉
          cube.rotationY  //物體繞世界坐標的Y軸,順時針旋轉
          cube.rotationZ  //物體繞世界坐標的Z軸,順時針旋轉

          cube.yaw(一定角度)  //以本地的Y為軸心,順時針旋轉
          cube.pitch(一定角度)  //以本地的X為軸心,順時針旋轉
          cube.roll(一定角度)  //以本地的Z為軸心,順時針旋轉
          (yaw-pitch-roll其實是歐拉角euler的一種描述方法,愿意研究圖形數學可以到網上百科查詢具體含義,我們flash3d研究所以后也會在圖形學原理里放出關于三種旋轉方式和萬向節鎖gimbal-lock的相關資料)

          這兩種有什么區別呢?還是自己嘗試嘗試吧~不要放棄任何一種哦,都是每天都會用到的東西。

          縮放:(默認下,單位為1,2,3…倍這種,不是百分比)
          cube.scaleX  //物體延X軸放大
          cube.scaleY  //物體延Y軸放大
          cube.scaleZ  //物體延Z軸放大
          這是分別延x,y,z的縮放,如果要整體縮放,直接用下面這個就可以了。
          cube.scale  //物體整體放大

          代碼流程:
          仍然有困難寫出代碼的朋友,可以 下載源代碼

          和上次一樣,建包,放傻瓜包,然后初始化最基礎的4要素。不想重新來一次的可以就修改上次的^_^。如果不記得了可以看 《第一篇 人人都能PV3D》—點擊到第一篇
          我們這次要添加一個cube(立方體)。

          cube=new Cube(new MaterialsList({all:new BitmapFileMaterial('map.jpg')}),500,500,500,3,3,3);
          介紹一下生成立方體的構造器,和我們第一篇的球體少許不同。
          第一個參數需要一個‘材質列表’(MaterialsList),而不是像我們上次小球只要單個材質。(不理解材質列表暫時沒關系,其實它就是一個很多單個材質添加在一起的‘數組’或object。我們以后會在中級研究中作一些具體分析)
          參數二,參數三,參數四分別是立方體的寬,長,高。
          參數五,參數六,參數七分別是決定長寬高有多少段(段數越多運行越慢,但是貼圖變形越小,越準確)。

          因為需要用‘材質列表’(MaterialsList),所以開始要記得把MaterialsList類導入進來。
          import org.papervision3d.materials.utils.MaterialsList;
          當然,也得把立方體的類導入
          import org.papervision3d.objects.primitives.Cube;

          為了能更清楚的測試這些控制的含義,我在初始化的時候先給立方體了一個角度。
          cube.rotationX=30;
          cube.rotationY=30;

          enterframe里面就可以測試我們學到的各種操作了。
          屬性需要這樣寫才能累加,才能看到動畫變化:
          cube.x+=10;
          方法直接寫就可以了:
          cube.MoveForward(10);

           這次的也非常簡單吧,記住它們,熟悉它們,因為我們每天都會用到。
          好好練習哦~加油!
          有任何不清楚的地方,歡迎到討論區發言。(無需注冊)

          DDM君
          Flab3D.com

          Flash3d研究所推薦的Pv3d傻瓜包下載
          源文件下載

          posted on 2008-11-19 19:36 seal 閱讀(609) 評論(0)  編輯  收藏 所屬分類: Flex+ActionScript
          主站蜘蛛池模板: 盱眙县| 聊城市| 信宜市| 安溪县| 盱眙县| 满城县| 祁东县| 蒙阴县| 金山区| 堆龙德庆县| 班戈县| 元江| 凤阳县| 安徽省| 罗源县| 崇仁县| 盱眙县| 顺平县| 江永县| 钟山县| 福泉市| 商南县| 洪江市| 哈尔滨市| 澎湖县| 恩平市| 浦江县| 深水埗区| 色达县| 哈尔滨市| 冕宁县| 淮南市| 重庆市| 昌平区| 洞口县| 呈贡县| 玛沁县| 普陀区| 浙江省| 新龙县| 北海市|