DDM君,F(xiàn)lab3D.com (允許轉(zhuǎn)載,轉(zhuǎn)載請注明)
所有PV3D三維模型都是繼承至DisplayObject3D類,所以所有三維模型都有同樣的移動,旋轉(zhuǎn),縮放的方法/屬性。(如果不理解什么叫繼承可以無視這句話=_=)講這句的意思是“攝像機(jī)這些也是DisplayObject3D”,所以也可以做同樣的操作。
我們第一篇的小球在這里不是特別能明顯表示下面的區(qū)別。所以我們這次用個立方體Cube。
原理介紹:

先記下上面這個圖,它保證我們不迷失在三維的世界里,如果你正好是maya,3dsmax的使用,恭喜你!和里面的道理一模一樣。
移動:
cube.x //物體在世界坐標(biāo)的X軸位置
cube.y //物體在世界坐標(biāo)的Y軸位置
cube.z //物體在世界坐標(biāo)的Z軸位置
pv3d的三維坐標(biāo) 圖1
cube.moveForward(一定距離) //向物體本地Z的正方向移動
cube.moveBackward(一定距離) //向物體本地Z的負(fù)方向移動
cube.moveDown(一定距離)//向物體本地Y的負(fù)方向移動
cube.moveUp(一定距離)//向物體本地Y的正方向移動
cube.moveLeft(一定距離)//向物體本地X的負(fù)方向移動
cube.moveRight(一定距離)////向物體本地X的正方向移動
這兩種有什么區(qū)別呢?其實(shí)就是world和local坐標(biāo)系的區(qū)別,上面那張圖應(yīng)該能幫助您理解。
旋轉(zhuǎn):
cube.rotationX //物體繞世界坐標(biāo)的X軸,順時針旋轉(zhuǎn)
cube.rotationY //物體繞世界坐標(biāo)的Y軸,順時針旋轉(zhuǎn)
cube.rotationZ //物體繞世界坐標(biāo)的Z軸,順時針旋轉(zhuǎn)
cube.yaw(一定角度) //以本地的Y為軸心,順時針旋轉(zhuǎn)
cube.pitch(一定角度) //以本地的X為軸心,順時針旋轉(zhuǎn)
cube.roll(一定角度) //以本地的Z為軸心,順時針旋轉(zhuǎn)
(yaw-pitch-roll其實(shí)是歐拉角euler的一種描述方法,愿意研究圖形數(shù)學(xué)可以到網(wǎng)上百科查詢具體含義,我們flash3d研究所以后也會在圖形學(xué)原理里放出關(guān)于三種旋轉(zhuǎn)方式和萬向節(jié)鎖gimbal-lock的相關(guān)資料)

這兩種有什么區(qū)別呢?還是自己嘗試嘗試吧~不要放棄任何一種哦,都是每天都會用到的東西。
縮放:(默認(rèn)下,單位為1,2,3…倍這種,不是百分比)
cube.scaleX //物體延X軸放大
cube.scaleY //物體延Y軸放大
cube.scaleZ //物體延Z軸放大
這是分別延x,y,z的縮放,如果要整體縮放,直接用下面這個就可以了。
cube.scale //物體整體放大
代碼流程:
仍然有困難寫出代碼的朋友,可以
下載源代碼
。
和上次一樣,建包,放傻瓜包,然后初始化最基礎(chǔ)的4要素。不想重新來一次的可以就修改上次的^_^。如果不記得了可以看
《第一篇 人人都能PV3D》—點(diǎn)擊到第一篇
我們這次要添加一個cube(立方體)。
cube=new Cube(new MaterialsList({all:new BitmapFileMaterial('map.jpg')}),500,500,500,3,3,3);
介紹一下生成立方體的構(gòu)造器,和我們第一篇的球體少許不同。
第一個參數(shù)需要一個‘材質(zhì)列表’(MaterialsList),而不是像我們上次小球只要單個材質(zhì)。(不理解材質(zhì)列表暫時沒關(guān)系,其實(shí)它就是一個很多單個材質(zhì)添加在一起的‘數(shù)組’或object。我們以后會在中級研究中作一些具體分析)
參數(shù)二,參數(shù)三,參數(shù)四分別是立方體的寬,長,高。
參數(shù)五,參數(shù)六,參數(shù)七分別是決定長寬高有多少段(段數(shù)越多運(yùn)行越慢,但是貼圖變形越小,越準(zhǔn)確)。
因為需要用‘材質(zhì)列表’(MaterialsList),所以開始要記得把MaterialsList類導(dǎo)入進(jìn)來。
import org.papervision3d.materials.utils.MaterialsList;
當(dāng)然,也得把立方體的類導(dǎo)入
import org.papervision3d.objects.primitives.Cube;
為了能更清楚的測試這些控制的含義,我在初始化的時候先給立方體了一個角度。
cube.rotationX=30;
cube.rotationY=30;
enterframe里面就可以測試我們學(xué)到的各種操作了。
屬性需要這樣寫才能累加,才能看到動畫變化:
cube.x+=10;
方法直接寫就可以了:
cube.MoveForward(10);
這次的也非常簡單吧,記住它們,熟悉它們,因為我們每天都會用到。
好好練習(xí)哦~加油!
有任何不清楚的地方,歡迎到討論區(qū)發(fā)言。(無需注冊)
DDM君
Flab3D.com
Flash3d研究所推薦的Pv3d傻瓜包下載
源文件下載