第三章後續翻譯【完結】

Managing the scene  場景的控制

 

 

3d對象要想在舞臺上呈現  需要加入到場景scence

Scence. addChild (3dObject);

以及移出場景:

Scence.removeChild(3dObject);

 

注意  :儘管這裏的  addChild  removeChild flash API一樣 但是其內部機制不一樣!所以不能對flash對象使用away3d   addChild  removeChild  方法

 

得到3d對象中的子對象

 

 

通過使用ObjectContainer3D對象的children屬性 得到一個子對象的數組

使用ObjectContainer3D.children.length  得到ObjectContainer3D子對象的個數

假如你知道某個子對象的索引 就可以用ObjectContainer3D.children【索引】得到具體的子對象  也可以通過 getChildByName()得到子對象

ObjectContainer3D.getChildByName(“子對象名稱”)

注意直接使用索引比使用getChildbyName的效率高些 !因爲getChildByName函數的本質也是在循環中比對name得來的!使用索引一步得到!.

 

我們不能在指定的索引位置添加3d對象(消耗太大)!因而使用Z-sorting排序來顯示對象而不是通過索引(pv3d一樣) .flash是通過索引來排序的! 所以在away3d/pv3d中沒有getChildIndex() and setChildIndex()這樣關於索引的方法

 

 

子對象可以用  parent屬性來得到父對象容器

 

當將一個3dObject對象從一個容器移到另一個時,需要先從前一個容器中移出來,在添加進另一個容器!而flash可以直接addChild 進行添加.

 

 

故切換父容器代碼爲:

previousContainer.removeChild(3dobject);

nowContainer.addChild(3dobject);

 

 

出於對性能計算的考慮!儘量的少嵌套也就是容器層數越少越好

 

 

Moving, rotating, and scaling in 3D

 

rotationX, rotationY, and rotationZ  屬性  具體的旋轉講解在第十章

 

 

 

 

 

 

 

 

 

Camera

 

Camera的種類 全在away3d.cameras包裏

 

默認的cameraCamera3D  它呈現的是一個正面顯示的透視圖

 

默認的z軸座標值爲-1000 pv3d裏一樣  x=0, y=0

 

 

隨着view3d的創建 默認的camera也就是創建了 當然 我們也可以像場景那樣從新付給其camera

 

var camera: Camera3D = new Camera3D()

camera.x=0

camera.y=0

camera.z=-1000

view.camera= camera

 

 

 

 

Moving the camera

 

Camera具有zoom focus屬性

默認的zoom =10

focus=100     focus的值就相當於照相機的鏡頭

當值很大時是長鏡頭,鏡頭拉長了,導致視野很小!人物變大

值很小時就是廣角鏡頭,視野很大,人物變小

 

 

lookAt()方法對準3d對象

//Use lookAt() to point the camera towards the center of the scene

//camera.lookAt(new Number3D(0, 0, 0));//表示camera對準 (0,0,0)這個點  (0,0,0)camera的座標的連線與camera的鏡頭垂直  默認的camera的鏡頭是沿着 Z軸正方向

//對準某個對象

camera.lookAt(_cube2.position)//Assign the new camera to the view

// pv3d  一樣  lookAt()Object3D的方法所以pv3d的任何對象都可以使用

 

 

TargetCamera3D

TargetCamera攝像機  pv3d 裏的一樣,

具有target 屬性 使camera始終對準target 

 

Away3d裏默認的camera是無目標的camera (也就是pv3d裏的freeCamera)

我們也可以在更新Enterframce函數裏使用 lookAt(3d.position) 來使camera對準3d對象  當然 我們可以直接使用TargetCamera3D 只需設置屬性target即可

 

var camera : TargetCamera3D = new TargetCamera3D();

camera.z = -1000;

//Assign the camera target as cube2

camera.target = _cube2;

//Assign the new camera to the view

_view.camera = camera;

 

 

 

HoverCamera3D

 

HoverCamera3D繼承TargetCamera3D,它繞目標target環繞旋轉

 

// Create a new camera object

_hoverCamera = new HoverCamera3D();

_hoverCamera.distance = 2000;//旋轉半徑

_hoverCamera.tiltAngle = 10;// camera垂直旋轉 tilt是以X爲軸進行旋轉的角度

//Assign the new camera to the view

_hoverCamera.steps = 16;//設置緩動 0表示其運動時沒有緩動easing  默認值爲8  值越大緩動越明顯也就是達到指定的角度時用的時間相對較長

_view.camera = _hoverCamera;

 

protected override function _onEnterFrame(ev : Event) : void

{

_hoverCamera.panAngle = stage.mouseX - stage.stageWidth/2;//camera水平旋轉 pan是以Y爲軸進行旋轉的角度

_hoverCamera.tiltAngle = stage.mouseY - stage.stageHeight/2;// camera垂直旋轉 tilt是以X爲軸進行旋轉的角度

 

_hoverCamera.hover();

_view.render();

}

 

SpringCam 用法 和pv3d裏的SpringCamera類似

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章