away3d 4.0学习(4)加载简单的外部模型
嗯,最近在导出找3d模型玩,google的模型库里面倒是有蛮多的,但是天朝的网络不给力,不是墙就是下不了,并且google的模型库需要下载专门的软件,于是就没怎么研究下去了。
然后从朋友那里得来一个3d max,晚上回去无聊乱搞搞,自己瞎搞了个模型出来了,于是顺道练习了一下3ds文件在away3d中的使用。
东西简陋了点,但是由于是第一次搞,还是蛮有成就感的。
源码如下:
package { import away3d.containers.ObjectContainer3D; import away3d.controllers.FirstPersonController; import away3d.controllers.HoverController; import away3d.controllers.LookAtController; import away3d.events.AssetEvent; import away3d.loaders.Loader3D; import away3d.loaders.parsers.Max3DSParser; import base.TemplateBase; import flash.events.Event; import flash.events.KeyboardEvent; import flash.events.MouseEvent; import flash.geom.Vector3D; import flash.net.URLRequest; import flash.ui.Keyboard; public class ModelLoaderTest extends TemplateBase { private var loader:Loader3D; private var controler:HoverController; private var step:Number=5; private var placeHolder:ObjectContainer3D; private var stageMouseX:Number; private var stageMouseY:Number; public function ModelLoaderTest() { super(); } override protected function init(e:Event=null):void { super.init(e); _view.camera.y = 500; loader = new Loader3D(); Loader3D.enableParser(Max3DSParser); loader.addEventListener(AssetEvent.ASSET_COMPLETE, onAssetComplete); loader.load(new URLRequest("assets/houseScene.3ds")); loader.scale(10); _view.scene.addChild(loader); placeHolder = new ObjectContainer3D(); placeHolder.y = 100; placeHolder.x = - 100; _view.camera.addChild(placeHolder); controler = new HoverController(_view.camera); initEvents(); } private function initEvents():void { stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown); stage.addEventListener(MouseEvent.MOUSE_WHEEL, onWheel); } private function mouseDown(e:MouseEvent):void { stage.addEventListener(MouseEvent.MOUSE_UP, mouseUp); stage.removeEventListener(MouseEvent.MOUSE_DOWN, mouseDown); stageMouseX = stage.mouseX; stageMouseY = stage.mouseY; } private function onWheel(e:MouseEvent):void { controler.distance *= (1+e.delta/100); } private function mouseUp(e:MouseEvent):void { stage.removeEventListener(MouseEvent.MOUSE_UP, mouseUp); stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown); var deltaX:Number = stage.mouseX - stageMouseX; var deltaY:Number = stage.mouseY - stageMouseY; controler.panAngle = 0.5*deltaX+controler.panAngle; controler.tiltAngle = 0.5*deltaY+controler.tiltAngle; } private function onAssetComplete(e:AssetEvent):void { } override protected function onEnter(e:Event):void { super.onEnter(e); } } }
效果图如下: