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类似