Sandy引擎學習筆記:攝影機

來源:互聯網
上載者:User

第三課程:如何使用攝影機?通過攝影機移動來使攝影的對象產生變化,這樣會使動畫變得容易。因為你不需要改變觀察對象的的屬性,只是改變攝影機的變化

 

 

  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. }

 

通過鍵盤控制,使攝影機可以上下左右,前後旋轉推進。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.