Away3D - 加载外部的3D模型(3ds格式为例)
1,Away3D支持的模型格式
(1)Away3D自4.1版本起,可以支持 MD2,MD5,AC3D,3DS,DAE,OBJ 这些3d模型格式。
(2)OBJ 虽然不支持动作。但是确实一种很广泛的格式,通常支持骨骼动画的模型有 MD2,MD5,3DS,AWD 等。
(3)其中 awd 是 away3d 的专有格式。可以通过 away3d 的模型编辑器 preFab 来导出生成。地址:http://away3d.com/prefab3d
2,本文介绍如何使用3DS格式的模型
(1)首先我们将 3ds 文件及其对应的的帖图素材添加到工程文件夹下。
(3)下面代码实现模型的加载,并添加到舞台中央。
3,效果图如下
(1)Away3D自4.1版本起,可以支持 MD2,MD5,AC3D,3DS,DAE,OBJ 这些3d模型格式。
(2)OBJ 虽然不支持动作。但是确实一种很广泛的格式,通常支持骨骼动画的模型有 MD2,MD5,3DS,AWD 等。
(3)其中 awd 是 away3d 的专有格式。可以通过 away3d 的模型编辑器 preFab 来导出生成。地址:http://away3d.com/prefab3d
2,本文介绍如何使用3DS格式的模型
(1)首先我们将 3ds 文件及其对应的的帖图素材添加到工程文件夹下。
(2)3ds 模型文件的文件名可以随便修改, 在程序中再指定。但模型对应的贴图名字最好不要改变,这个是制作 3ds 模型时内部已经定义好的。改了就无法找到对应的贴图文件了。
模型及贴图下载:assets.zip
(3)下面代码实现模型的加载,并添加到舞台中央。
package{ import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.Event; import flash.events.MouseEvent; import flash.net.URLRequest; import away3d.containers.View3D; import away3d.controllers.HoverController; import away3d.events.LoaderEvent; import away3d.loaders.Loader3D; import away3d.loaders.parsers.Max3DSParser; import away3d.materials.TextureMaterial; [SWF(frameRate="60", backgroundColor="#FFFFFF")] public class ModelLoader extends Sprite { private var _view3D:View3D; private var cameraController:HoverController;//360全景展示相机控制器 //用来加载3D模型 private var loader:Loader3D; //地板材质 private var floorMaterial:TextureMaterial; private var _lastX:Number = 0; private var _lastY:Number = 0; public function ModelLoader() { initEngine(); initMaterials(); initObjects(); initListeners(); } /** * 初始化引擎 */ private function initEngine():void { stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; // 创建一个视口 _view3D = new View3D(); _view3D.antiAlias = 4; //设置抗锯齿级别 //初始化摄像头 cameraController = new HoverController(_view3D.camera); cameraController.tiltAngle = 15; addChild(_view3D); } /** * 初始化材质 */ private function initMaterials():void { } /** * 初始化物体 */ private function initObjects():void { loadModel("hero.3ds"); } /** * 加载模型 */ public function loadModel(product:String):void { Loader3D.enableParser(Max3DSParser); loader = new Loader3D(); loader.addEventListener(LoaderEvent.RESOURCE_COMPLETE, onModelLoaded); loader.load(new URLRequest("assets/" + product)); loader.scale(4); _view3D.scene.addChild(loader); } private function onModelLoaded(e: LoaderEvent) : void { } /** * 初始化监听 */ private function initListeners():void { addEventListener(Event.ENTER_FRAME, _onEnterFrame); //鼠标事件监听 stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown); stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp); stage.addEventListener(MouseEvent.MOUSE_WHEEL,onWheel); stage.addEventListener(Event.RESIZE, onResize); onResize(); } /** * 渲染视图 */ private function _onEnterFrame(e:Event):void { //渲染视图 _view3D.render(); } /** * 使用舞台大小一直全屏 */ private function onResize(event:Event = null):void { _view3D.width = stage.stageWidth; _view3D.height = stage.stageHeight; } /** * 鼠标滚轮事件 */ private function onWheel(e:MouseEvent):void { if(e.delta > 0){ if(cameraController.distance < 1000) cameraController.distance += 100; }else{ if(cameraController.distance > 600) cameraController.distance -= 100; } } /** * 鼠标按下事件 */ private function onMouseDown(event:MouseEvent):void { _view3D.stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler); _lastX = _view3D.mouseX; _lastY = _view3D.mouseY; } /** * 鼠标弹起事件 */ private function onMouseUp(event:MouseEvent):void { _view3D.stage.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler); } /** * 鼠标移动事件 */ private function mouseMoveHandler(event:MouseEvent):void { //移动摄像机 var dx:Number = _view3D.mouseX - _lastX; var dy:Number = _view3D.mouseY - _lastY; cameraController.panAngle += dx; cameraController.tiltAngle += dy; _lastX = _view3D.mouseX; _lastY = _view3D.mouseY; } } }
3,效果图如下