Away3D Lite:Basic_InteractiveObject

本文介绍了如何初始化3D引擎并创建一个基本的3D场景,包括设置镜头视角、添加平面物体及其排序方式,并实现了鼠标点击物体和拖拽镜头的基本交互功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

初始化引擎:

scene = new Scene3D();

// 创建一个俯瞰镜头
// Extended camera used to hover round a specified target object
camera = new HoverCamera3D();
camera.focus = 50;
// 镜头距离中心点的距离
camera.distance = 1000;
// 镜头上下移动的最小角度
camera.minTiltAngle = 0;
// 镜头上下移动的最大角度
camera.maxTiltAngle = 90;
// 镜头的初始左右位置(角度)
camera.panAngle = 45;
// 镜头的初始上下位置(角度)
camera.tiltAngle = 20;
// 启动镜头俯瞰特性,必须每帧都有,不然就没有动画效果了
// Updates  the camera orientation
// Values are calculated using the defined tiltAngle, panAngle and steps variables.
// hover(true)表示使用steps属性,hover()表示不适用steps属性,默认是false
camera.hover(true);

renderer = new BasicRenderer();

view = new View3D();
view.scene = scene;
view.camera = camera;
view.renderer = renderer;

//view.addSourceURL("srcview/index.html");
addChild(view);

 

建立3D物体:

plane = new Plane();
plane.y = -20;
plane.width = 1000;
plane.height = 1000;
// sortType 表示这个物体在场景中Z-SORT的排序规则
// MeshSortType.BACK 表示以这个物体的最远点进行Z-SORT排序
// MeshSortType.CENTER 表示以这个物体的中心点进行Z-SORT排序
// MeshSortType.FRONT 表示以这个物体的最近点进行Z-SORT排序
plane.sortType = MeshSortType.BACK;
plane.segmentsW = 20;
plane.segmentsH = 20;
// Defines whether the coordinates of the plane points use a yUp orientation (true) or a zUp orientation (false).
// 确定该plane的法向量朝向,Y轴(true)还是Z轴(false)
plane.yUp = false;
scene.addChild(plane);
 

交互:判断点击的是哪个物体:

scene.addEventListener(MouseEvent3D.MOUSE_UP, onSceneMouseUp);

private function onSceneMouseUp(e:MouseEvent3D):void
{
    if (e.object is Mesh) {
        var mesh:Mesh = e.object as Mesh;
        mesh.material = new WireColorMaterial();
    }
}
 

实现拖拽镜头操作:

stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
addEventListener(Event.ENTER_FRAME, onEnterFrame);

private function onMouseDown(event:MouseEvent):void
{
    lastPanAngle = camera.panAngle;
    lastTiltAngle = camera.tiltAngle;
    lastMouseX = stage.mouseX;
    lastMouseY = stage.mouseY;
	move = true;
	stage.addEventListener(Event.MOUSE_LEAVE, onStageMouseLeave);
}

private function onEnterFrame(event:Event):void
{
	if (move) {
		camera.panAngle = 0.3*(stage.mouseX - lastMouseX) + lastPanAngle;
		camera.tiltAngle = 0.3*(stage.mouseY - lastMouseY) + lastTiltAngle;
	}	
    // 这句必须有
    camera.hover();  
	view.render();
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值