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包裏
默認的camera是Camera3D 它呈現的是一個正面顯示的透視圖
默認的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類似