阳光VIP

少壮不努力,老大徒伤悲。平日弗用功,自到临期悔。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Sandy引擎学习笔记:摄影机

Posted on 2012-02-16 20:34  阳光VIP  阅读(171)  评论(0编辑  收藏  举报

第三课程:如何使用摄影机?通过摄影机移动来使摄影的对象产生变化,这样会使动画变得容易。因为你不需要改变观察对象的的属性,只是改变摄影机的变化

 

 

  1. package 
  2. {
  3.     import flash.display.Sprite;
  4.     import flash.events.*;
  5.     import sandy.core.Scene3D;
  6.     import sandy.core.data.*;
  7.     import sandy.core.scenegraph.*;
  8.     import sandy.materials.*;
  9.     import sandy.materials.attributes.*;
  10.     import sandy.primitive.*;
  11.     import sandy.parser.*;
  12.     import flash.ui.Keyboard;
  13.     public class My3D extends Sprite
  14.     {
  15.         private var scene:Scene3D;
  16.         private var camera:Camera3D;
  17.         private var pot:Shape3D;
  18.         public function My3D()
  19.         {
  20.             var parser:IParser = Parser.create("asset/teieraASE.ASE",Parser.ASE );//导入ase格式,让它在flash里面重写绘画
  21.             parser.addEventListener( ParserEvent.FAIL, onError );//模型导入失败监听
  22.             parser.addEventListener( ParserEvent.INIT, createScene );//初始化监听事件
  23.             stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
  24.             parser.parse();//加载文件
  25.         }
  26.         private function onError( pEvt:ParserEvent ):void
  27.         {
  28.             trace("加载文件错误");
  29.         }
  30.         private function createScene(p_eEvent:ParserEvent ):void
  31.         {
  32.             camera = new Camera3D( 500, 300 );//建立摄影机
  33.             camera.y = 30;
  34.             camera.z = -200;
  35.             var g:Group = Group( p_eEvent.group);
  36.             pot = g.children[0] as Shape3D;//将模型转为shape3d 类型
  37.             pot.x = 0;
  38.             var materialAttr:MaterialAttributes = new MaterialAttributes(new LightAttributes( true, 0.2 ) );
  39.             var material:Material = new ColorMaterial( 0xE0F87E, 0.9, materialAttr);//添加颜色材质和和光线
  40.             material.lightingEnable = true;//开启光线
  41.             var app:Appearance = new Appearance( material);//创建一个物体表面
  42.             pot.appearance = app;
  43.             scene = new Scene3D( "scene", this, camera, g );
  44.             addEventListener( Event.ENTER_FRAME, enterFrameHandler );
  45.         }
  46.         private function enterFrameHandler( event : Event ):void
  47.         {
  48.             //pot.pan +=3;
  49.             scene.render();
  50.         }
  51.         private function keyPressed(event:KeyboardEvent):void
  52.         {
  53.             switch (event.keyCode)
  54.             {
  55.                 case Keyboard.UP :
  56.                     camera.tilt +=2;//上移动
  57.                     break;
  58.                 case Keyboard.DOWN :
  59.                     camera.tilt -=2;//下移动
  60.                     break;
  61.                 case Keyboard.RIGHT :
  62.                     camera.pan -=2;//左移动
  63.                     break;
  64.                 case Keyboard.LEFT :
  65.                     camera.pan +=2;//右移动
  66.                     break;
  67.                 case Keyboard.CONTROL :
  68.                     camera.roll +=2;//旋转
  69.                     break;
  70.                 case Keyboard.PAGE_DOWN :
  71.                     camera.z -=5;//向后移动
  72.                     break;
  73.                 case Keyboard.PAGE_UP ://后移动
  74.                     camera.z +=5;
  75.                     break;
  76.             }
  77.         }
  78.     }
  79. }

 

通过键盘控制,使摄影机可以上下左右,前后旋转推进。