`
hereson
  • 浏览: 1430465 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

pv教学

    博客分类:
  • Pv3d
阅读更多
Papervision3D 教學 part 3.2 -- 子母視窗

想嚐試製作子母視窗的感覺,建立了兩個 Camera3D,但是並無法透過 camera2 看到 scene,然後輸出在另外一個 MC 上,或許有方法可以做到,我還需要找找看。而以下我的作法是,用 camera2 先將 scene 輸出一次,並且立即讀取其 BiemapData 將之繪製到另外一個 MC 子視窗中,然後立刻改以 camera 將 scene 重新輸出一次。程式碼如下:



package {import flash.display.*;import flash.events.*;import flash.utils.*;import org.papervision3d.cameras.Camera3D;import org.papervision3d.scenes.Scene3D;import org.papervision3d.objects.*;import org.papervision3d.materials.*;import flash.geom.Rectangle;import flash.geom.Matrix;[SWF(backgroundColor="#000000", frameRate="60", width="400", height="400")]public class T3step2 extends Sprite{private static var PI:Number = Math.PI;private static var TH:Number = PI / 180;private var container:Sprite;private var scene:Scene3D;private var camera:Camera3D;private var camera2:Camera3D;private var rootNode:DisplayObject3D;private var du:Number = 0;private var photoCount:int = 9;private var movingRadius:int = 1000;private var movingHeight:int = 500;private var timer:Timer;private var childWindowScreen:Sprite;private var bd:BitmapData;private var matrix:Matrix;private var bmp:Bitmap;public function T3step2(){ // initialize the objects init3D(); // add a listener for the 3D loop addEventListener(Event.ENTER_FRAME, loop3D);}private function init3D():void{ container = new Sprite(); addChild(container); container.x = 200; container.y = 200; scene = new Scene3D(container); camera = new Camera3D(); camera.y = movingHeight; camera.z = -movingRadius; camera.zoom = 10; camera.focus = 100; camera2 = new Camera3D(); camera2.y = movingHeight; camera2.z = -movingRadius; camera2.zoom = 10; camera2.focus = 100; rootNode = scene.addChild(new DisplayObject3D("rootNode")); var ground:DisplayObject3D = rootNode.addChild(new Plane(new ColorMaterial(0xffcc00), 500, 500, 3, 3), "ground"); ground.rotationX = -90; var item:DisplayObject3D = new DisplayObject3D(); item.addChild(new Plane(new BitmapFileMaterial(getFileName()), 100, 100, 1, 1, {rotationY:0, z:-50}), "p1"); item.addChild(new Plane(new BitmapFileMaterial(getFileName()), 100, 100, 1, 1, {rotationY:90, x:-50}), "p2"); item.addChild(new Plane(new BitmapFileMaterial(getFileName()), 100, 100, 1, 1, {rotationY:-90, x:50}), "p3"); item.addChild(new Plane(new BitmapFileMaterial(getFileName()), 100, 100, 1, 1, {rotationY:180, z:50}), "p4"); item.addChild(new Plane(new BitmapFileMaterial(getFileName()), 100, 100, 1, 1, {rotationX:90, y:-50}), "p5"); item.addChild(new Plane(new BitmapFileMaterial(getFileName()), 100, 100, 1, 1, {rotationX:-90, y:50}), "p6"); item.y = 150; rootNode.addChild(item, "item"); /* timer = new Timer(1000, 0); timer.addEventListener(TimerEvent.TIMER, onTimer); timer.start(); */ //子母視窗 var childWindow:Sprite = new Sprite(); addChild(childWindow); var childWindowBorder:Sprite = new Sprite(); childWindow.addChild(childWindowBorder); childWindowBorder.graphics.lineStyle(2, 0xffffff); childWindowBorder.graphics.drawRect(0, 0, 100, 100); childWindowScreen = new Sprite(); childWindow.addChild(childWindowScreen); childWindow.x = 300; childWindow.y = 300;}private function loop3D(event:Event):void{ //物體本身旋轉 var item:DisplayObject3D = rootNode.getChildByName("item"); if(item!=null){  item.rotationX++;  item.rotationY++;  item.rotationZ++; } //carema2先將畫面記錄下來 scene.renderCamera(camera2); bd = new BitmapData(400, 400, false, 0x0000ff); matrix = new Matrix(); matrix.translate(200, 200); matrix.scale(0.25, 0.25); bd.draw(scene.container, matrix); if(bmp!=null){  childWindowScreen.removeChild(bmp); } bmp = new Bitmap(bd); childWindowScreen.addChild(bmp); bd = null; //改用carema旋轉輸出 du++; if(du==360)du=0; var newX:Number = movingRadius * formatNum(Math.cos(du*TH), 3); var newZ:Number = movingRadius * formatNum(Math.sin(du*TH), 3); camera.x = newX; camera.z = newZ; scene.renderCamera(camera);}private function formatNum(num:Number, cnt:Number):Number{ return Math.round(num * Math.pow(10, cnt)) / Math.pow(10, cnt);}private function onTimer(event:TimerEvent):void{ var item:DisplayObject3D = rootNode.getChildByName("item"); if(item!=null){  var pName:String = "p" + (Math.floor(Math.random()*6)+1);  var p:DisplayObject3D = item.getChildByName(pName);  if(p!=null){   p.material = new BitmapFileMaterial(getFileName());  } }}private function getFileName():String{ return "http://ben.rb.chang.googlepages.com/photos"+(Math.floor(Math.random()*photoCount)+1)+".JPG";}}}


測試時,不斷搞到瀏覽器當掉,後來我將 onTimer() 時的切換各面向的貼圖部分拿掉,改善了一點點!此外,若是觀察記憶體消耗的話,會發現他很快就衝到頂點,然後只好等 Gabarge Collection(GC) 自己找時間釋放掉,才會稍微順暢幾秒鐘......$%&@#



等到整個瀏覽器關閉後,就恢復正常了!



看效果!

於 6/13/2007 06:35:00 下午 0 意見  

標籤: AS3, Flash, Papervision3D


Papervision3D 教學 part 3 -- 建模

先前的練習,我們都是直接以 PaperVision3D 所提供的基本模型 Cube 來建模,然後你會發現我們貼圖時,會將這個 Cube 的六個面都貼成同樣的材質,但是通常我們的模型上每個面有不同的貼圖,所以以下我做的範例,是先建立一個叫做 item 的 DisplayObject3D,然後在這個 DisplayObject3D 中加入六個 Plane 物件,並為這六個 Plane 進行貼圖,然後將這六個 Plane 組合成 Cube 的六個面向。範例中的其他部分之前提過,包含 camera 照圓心座標旋轉,以及透過 Timer 每隔一秒亂數決定這個我們自製 Cube 中其中一面向換貼圖。程式碼如下:



package {import flash.display.*;import flash.events.*;import flash.utils.*;import org.papervision3d.cameras.Camera3D;import org.papervision3d.scenes.Scene3D;import org.papervision3d.objects.*import org.papervision3d.materials.*[SWF(backgroundColor="#000000", frameRate="60", width="400", height="400")]public class T3step1 extends Sprite{ private static var PI:Number = Math.PI; private static var TH:Number = PI / 180;  private var container:Sprite; private var scene:Scene3D; private var camera:Camera3D; private var rootNode:DisplayObject3D; private var du:Number = 0; private var photoCount:int = 9; private var movingRadius:int = 1000; private var movingHeight:int = 500; private var timer:Timer; public function T3step1() {  // initialize the objects  init3D();   // add a listener for the 3D loop  addEventListener(Event.ENTER_FRAME, loop3D); } private function init3D():void{   container = new Sprite();  addChild(container);   container.x = 200;  container.y = 200;   scene = new Scene3D(container);   camera = new Camera3D();  camera.y = movingHeight;  camera.z = -movingRadius;  camera.zoom = 10;  camera.focus = 100;   rootNode = scene.addChild(new DisplayObject3D("rootNode"));   var ground:DisplayObject3D = rootNode.addChild(new Plane(new ColorMaterial(0xffcc00), 500, 500, 10, 10), "ground");  ground.rotationX = -90;  var item:DisplayObject3D = new DisplayObject3D();  item.addChild(new Plane(new BitmapFileMaterial(getFileName()), 100, 100, 1, 1, {rotationY:0, z:-50}), "p1");  item.addChild(new Plane(new BitmapFileMaterial(getFileName()), 100, 100, 1, 1, {rotationY:90, x:-50}), "p2");  item.addChild(new Plane(new BitmapFileMaterial(getFileName()), 100, 100, 1, 1, {rotationY:-90, x:50}), "p3");  item.addChild(new Plane(new BitmapFileMaterial(getFileName()), 100, 100, 1, 1, {rotationY:180, z:50}), "p4");  item.addChild(new Plane(new BitmapFileMaterial(getFileName()), 100, 100, 1, 1, {rotationX:90, y:-50}), "p5");  item.addChild(new Plane(new BitmapFileMaterial(getFileName()), 100, 100, 1, 1, {rotationX:-90, y:50}), "p6");  item.y = 150;   rootNode.addChild(item, "item");   timer = new Timer(1000, 0);  timer.addEventListener(TimerEvent.TIMER, onTimer);  timer.start(); } private function loop3D(event:Event):void{   var item:DisplayObject3D = rootNode.getChildByName("item");  if(item!=null){   item.rotationX++;   item.rotationY++;   item.rotationZ++;  }  du++;  if(du==360)du=0;   var newX:Number = movingRadius * formatNum(Math.cos(du*TH), 3);  var newZ:Number = movingRadius * formatNum(Math.sin(du*TH), 3);   camera.x = newX;  camera.z = newZ;    scene.renderCamera(camera); } private function formatNum(num:Number, cnt:Number):Number{  return Math.round(num * Math.pow(10, cnt)) / Math.pow(10, cnt); } private function onTimer(event:TimerEvent):void{  var item:DisplayObject3D = rootNode.getChildByName("item");  if(item!=null){   var pName:String = "p" + (Math.floor(Math.random()*6)+1);   var p:DisplayObject3D = item.getChildByName(pName);   if(p!=null){    p.material = new BitmapFileMaterial(getFileName());   }  } } private function getFileName():String{  return "http://ben.rb.chang.googlepages.com/photos"+(Math.floor(Math.random()*photoCount)+1)+".JPG"; }}}


看效果!

於 6/13/2007 04:22:00 下午 1 意見  

標籤: AS3, Flash, Papervision3D


Papervision3D 教學 part 2.3 -- 用外部圖檔做貼圖材質

貼圖材質,除了可以貼純色 (ColorMaterial) 與 BitmapData (BitmapMaterial) 之外,還可以直接拿外部圖檔 (BitmapFileMaterial) 進行貼圖,以下這個範例我就是採用 BitmapFileMaterial 貼圖,並且每隔 3000 微秒就將圖片重新載入貼過!程式碼如下:



package {import flash.display.Sprite;import flash.display.Bitmap;import flash.events.*;import flash.utils.*;import org.papervision3d.cameras.Camera3D;import org.papervision3d.scenes.Scene3D;import org.papervision3d.objects.*import org.papervision3d.materials.*[SWF(backgroundColor="#000000", frameRate="60", width="400", height="400")]public class T2step4 extends Sprite{ private static var PI:Number = Math.PI; private static var TH:Number = PI / 180; private var container:Sprite; private var scene:Scene3D; private var camera:Camera3D; private var rootNode:DisplayObject3D; private var du:Number = 0; private var movingRadius:int = 2000; private var movingHeight:int = 2000; private var photoIdx:int = 1; private var photoCount:int = 9; private var timer:Timer; public function T2step4() {  // initialize the objects  init3D();   // add a listener for the 3D loop  addEventListener(Event.ENTER_FRAME, loop3D);  addEventListener(MouseEvent.MOUSE_WHEEL, onMouseWheel); } private function init3D():void{   container = new Sprite();  addChild(container);   container.x = 200;  container.y = 200;   scene = new Scene3D(container);   camera = new Camera3D();  camera.y = movingHeight;  camera.z = -movingRadius;  camera.zoom = 10;  camera.focus = 100;   rootNode = scene.addChild(new DisplayObject3D("rootNode"));   var ground:DisplayObject3D = rootNode.addChild(new Plane(new ColorMaterial(0xffcc00), 500, 500, 10, 10), "ground");  ground.rotationX = -90;  var myCube1:DisplayObject3D = rootNode.addChild(new Cube(new BitmapFileMaterial(getFileName()), 100, 100, 100, 1, 1, 1), "myCube1");  myCube1.y = 50;  timer = new Timer(3000, 0);  timer.addEventListener(TimerEvent.TIMER, onTimer);  timer.start(); } private function loop3D(event:Event):void{  /*  du++;  if(du==360)du=0;  */   du = 360 * (this.mouseX / stage.stageWidth);   var newX:Number = movingRadius * formatNum(Math.cos(du*TH), 3);  var newY:Number = movingHeight;  var newZ:Number = movingRadius * formatNum(Math.sin(du*TH), 3);   camera.x = newX;  camera.y = newY;  camera.z = newZ;      scene.renderCamera(camera); } private function formatNum(num:Number, cnt:Number):Number{  return Math.round(num * Math.pow(10, cnt)) / Math.pow(10, cnt); } private function onMouseWheel(event:MouseEvent):void{   //event.delta = 3 | -3   movingRadius -= event.delta*10;  if(movingRadius<=0)movingRadius=1;   movingHeight -= event.delta*10;  if(movingHeight<=200)movingHeight=200; } private function onTimer(event:TimerEvent):void{  var myCube1:DisplayObject3D = rootNode.getChildByName("myCube1");  myCube1.material = new BitmapFileMaterial(getFileName()); } private function getFileName():String{  return "http://ben.rb.chang.googlepages.com/photos"+(Math.floor(Math.random()*photoCount)+1)+".JPG"; }}}


測試畫面如下:






同樣的機制,我把先前教過的範例再加上這個週期換圖的效果,感覺又更絢麗了!程式碼如下,每個 Cube 都有自己的 Timer 控制,換圖時間不一定,以亂數決定的!


package {import flash.display.Sprite;import flash.display.Bitmap;import flash.events.Event;import org.papervision3d.cameras.Camera3D;import org.papervision3d.scenes.Scene3D;import org.papervision3d.objects.*import org.papervision3d.materials.* import flash.utils.Timer;import flash.events.TimerEvent;[SWF(backgroundColor="#000000", frameRate="60", width="400", height="400")]public class Step8 extends Sprite{ private var container:Sprite; private var scene:Scene3D; private var camera:Camera3D; private var rootNode:DisplayObject3D; private var AMOUNT:int = 50; private var rotationSettingArray:Array = new Array(); private var timerArray:Array = new Array(); private var photoCount:int = 9; public function Step8() {  // initialize the objects  init3D();   // add a listener for the 3D loop  addEventListener(Event.ENTER_FRAME, loop3D); } private function init3D():void{   container = new Sprite();  addChild(container);   container.x = 200;  container.y = 200;   scene = new Scene3D(container);   camera = new Camera3D();  camera.z = -3000;  camera.zoom = 10;  camera.focus = 100;   rootNode = scene.addChild(new DisplayObject3D("rootNode"));   for(var i:int=0; i<AMOUNT; i++){   var myCube:DisplayObject3D = rootNode.addChild(new Cube(new BitmapFileMaterial(getFileName()), 100, 100, 100, 1, 1, 1), "myCube" + i);   myCube.moveBackward(Math.random() * (3000-100/2+1));     if(Math.random()*2>1)    myCube.moveLeft(Math.random()*500);   else    myCube.moveRight(Math.random()*500);     if(Math.random()*2>1)    myCube.moveUp(Math.random()*500);   else    myCube.moveDown(Math.random()*500);      rotationSettingArray.push({rX:(Math.random()-Math.random())*2         , rY:(Math.random()-Math.random())*2         , rZ:(Math.random()-Math.random())*2});           var timer:Timer = new Timer((Math.round(Math.random()*5)+5)*1000, 0);   timer.addEventListener(TimerEvent.TIMER, onTimer);   timer.start();   timerArray.push(timer);  } } private function loop3D(event:Event):void{   for(var i:int=0; i<AMOUNT; i++){   var myCube:DisplayObject3D = rootNode.getChildByName("myCube" + i);     if(myCube!=null){    myCube.rotationX+=rotationSettingArray[i].rX;    myCube.rotationY+=rotationSettingArray[i].rY;    myCube.rotationZ+=rotationSettingArray[i].rZ;   }  }  scene.renderCamera(camera); } private function onTimer(event:TimerEvent):void{  for(var i:int=0; i<timerArray.length; i++){   if(event.target==timerArray[i]){    var myCube:DisplayObject3D = rootNode.getChildByName("myCube"+i);    var fileName:String = getFileName();    trace(fileName);    myCube.material = new BitmapFileMaterial(fileName);   }  } } private function getFileName():String{  return "http://ben.rb.chang.googlepages.com/photos"+(Math.floor(Math.random()*photoCount)+1)+".JPG"; }}}


看效果!

於 6/13/2007 12:47:00 下午 0 意見  

標籤: AS3, Flash, Papervision3D


Papervision3D 教學 part 2.2 -- 空照 與滑鼠互動

繼續上一篇的 Camera 操控,這次加上滑鼠,左右移動可以控制 camera 繞著圓心做旋轉,然後滾輪的部份,我會用來同時改變 carema 的高度以及繞圓心旋轉的半徑,程式碼如下:



package {import flash.display.Sprite;import flash.display.Bitmap;import flash.events.*;import org.papervision3d.cameras.Camera3D;import org.papervision3d.scenes.Scene3D;import org.papervision3d.objects.*import org.papervision3d.materials.*[SWF(backgroundColor="#000000", frameRate="60", width="400", height="400")]public class T2step3 extends Sprite{ private static var PI:Number = Math.PI; private static var TH:Number = PI / 180;  [Embed(source="../assets/IMG_1054.JPG")] private var CubeTexture:Class; private var container:Sprite; private var scene:Scene3D; private var camera:Camera3D; private var rootNode:DisplayObject3D; private var du:Number = 0; private var movingRadius:int = 2000; private var movingHeight:int = 2000; public function T2step3() {  // initialize the objects  init3D();   // add a listener for the 3D loop  addEventListener(Event.ENTER_FRAME, loop3D);  addEventListener(MouseEvent.MOUSE_WHEEL, onMouseWheel); } private function init3D():void{   container = new Sprite();  addChild(container);   container.x = 200;  container.y = 200;   scene = new Scene3D(container);   camera = new Camera3D();  camera.y = movingHeight;  camera.z = -movingRadius;  camera.zoom = 10;  camera.focus = 100;   rootNode = scene.addChild(new DisplayObject3D("rootNode"));   var ground:DisplayObject3D = rootNode.addChild(new Plane(new ColorMaterial(0xffcc00), 500, 500, 10, 10), "ground");  ground.rotationX = -90;  var cubeTexture:Bitmap = new CubeTexture() as Bitmap;  var myCube1:DisplayObject3D = rootNode.addChild(new Cube(new BitmapMaterial(cubeTexture.bitmapData), 100, 100, 100, 1, 1, 1), "myCube1");  myCube1.y = 50; } private function loop3D(event:Event):void{  /*  du++;  if(du==360)du=0;  */   du = 360 * (this.mouseX / stage.stageWidth);   var newX:Number = movingRadius * formatNum(Math.cos(du*TH), 3);  var newY:Number = movingHeight;  var newZ:Number = movingRadius * formatNum(Math.sin(du*TH), 3);   camera.x = newX;  camera.y = newY;  camera.z = newZ;      scene.renderCamera(camera); } private function formatNum(num:Number, cnt:Number):Number{  return Math.round(num * Math.pow(10, cnt)) / Math.pow(10, cnt); } private function onMouseWheel(event:MouseEvent):void{   //event.delta = 3 | -3   movingRadius -= event.delta*10;  if(movingRadius<=0)movingRadius=1;   movingHeight -= event.delta*10;  if(movingHeight<=200)movingHeight=200; }}}


看效果!

於 6/13/2007 10:43:00 上午 6 意見  

標籤: AS3, Flash, Papervision3D


Papervision3D 教學 part 2 -- 空照

我第二篇 PaperVision3D 的教學,是針對 Camera 的基本操控,這個範例我將 Camera 移到空中 高度 2000 的位置(y=2000),在 onEnterFrame() 時,會設定 carema 的座標,繞著中心點作旋轉,有點像是衛星移動的感覺。不過若是只對著一個 myCube1 做拍照的話,可能這樣的範例會看不出到底是 myCube1 在自己旋轉,還是 camera 在繞著他旋轉,所以我另外製作了一 Plane 物件名叫 ground 作為地板,預設這個地板是 X-Y 面向的單面,我需要將他順著 X 軸做翻轉,變成 X-Z 面向。



package {import flash.display.Sprite;import flash.display.Bitmap;import flash.events.Event;import org.papervision3d.cameras.Camera3D;import org.papervision3d.scenes.Scene3D;import org.papervision3d.objects.*import org.papervision3d.materials.*[SWF(backgroundColor="#000000", frameRate="60", width="400", height="400")]public class T2step1 extends Sprite{ private static var PI:Number = Math.PI; private static var TH:Number = PI / 180;  [Embed(source="../assets/IMG_1054.JPG")] private var CubeTexture:Class; private var container:Sprite; private var scene:Scene3D; private var camera:Camera3D; private var rootNode:DisplayObject3D; private var du:Number = 0; public function T2step1() {  // initialize the objects  init3D();   // add a listener for the 3D loop  addEventListener(Event.ENTER_FRAME, loop3D); } private function init3D():void{   container = new Sprite();  addChild(container);   container.x = 200;  container.y = 200;   scene = new Scene3D(container);   camera = new Camera3D();  camera.y = 2000;  camera.z = -2000;  camera.zoom = 10;  camera.focus = 100;   rootNode = scene.addChild(new DisplayObject3D("rootNode"));   var ground:DisplayObject3D = rootNode.addChild(new Plane(new ColorMaterial(0xffcc00), 500, 500, 1, 1), "ground");  ground.rotationX = -90;  var cubeTexture:Bitmap = new CubeTexture() as Bitmap;  var myCube1:DisplayObject3D = rootNode.addChild(new Cube(new BitmapMaterial(cubeTexture.bitmapData), 100, 100, 100, 1, 1, 1), "myCube1");  myCube1.y = 50; } private function loop3D(event:Event):void{  du++;  if(du==360)du=0;   var newX:Number = 2000 * formatNum(Math.cos(du*TH), 3);  var newZ:Number = 2000 * formatNum(Math.sin(du*TH), 3);   camera.x = newX;  camera.z = newZ;      scene.renderCamera(camera); } private function formatNum(num:Number, cnt:Number):Number{  return Math.round(num * Math.pow(10, cnt)) / Math.pow(10, cnt); }}}


測試畫面如下:






你可能會發現,在 camera 繞著中心旋轉拍攝時,地面 ground 與 myCube1 某些部份會有些重疊衝突的問題,你需要時時想像,其實我們看到的 " 一個面 ",並不是真的由一個面構成,而是由 PV3D engine 將這個面拆成多個三角形拼貼而成的。對於這個問題,我試圖將 myCube1 的高度拉更高一點,從 myCube1.y = 51 一直拉到 100 以上,這個問題會得到改善,但還是會出現重疊三角形。另一種做法也可以改善這個問題,就是將地面的 segments 增加,由原本的 1 改成 10 以上,這樣一來,地面就是由更多的小三角碎片所組成的,而重疊時會造成的破碎感覺會小一點點,不過想必這樣的運算會比較多,所以,就別介意這種視覺問題囉!以下是改過的程式碼:


package {import flash.display.Sprite;import flash.display.Bitmap;import flash.events.Event;import org.papervision3d.cameras.Camera3D;import org.papervision3d.scenes.Scene3D;import org.papervision3d.objects.*import org.papervision3d.materials.*[SWF(backgroundColor="#000000", frameRate="60", width="400", height="400")]public class T2step2 extends Sprite{ private static var PI:Number = Math.PI; private static var TH:Number = PI / 180;  [Embed(source="../assets/IMG_1054.JPG")] private var CubeTexture:Class; private var container:Sprite; private var scene:Scene3D; private var camera:Camera3D; private var rootNode:DisplayObject3D; private var du:Number = 0; public function T2step2() {  // initialize the objects  init3D();   // add a listener for the 3D loop  addEventListener(Event.ENTER_FRAME, loop3D); } private function init3D():void{   container = new Sprite();  addChild(container);   container.x = 200;  container.y = 200;   scene = new Scene3D(container);   camera = new Camera3D();  camera.y = 2000;  camera.z = -2000;  camera.zoom = 10;  camera.focus = 100;   rootNode = scene.addChild(new DisplayObject3D("rootNode"));   var ground:DisplayObject3D = rootNode.addChild(new Plane(new ColorMaterial(0xffcc00), 500, 500, 10, 10), "ground");  ground.rotationX = -90;  var cubeTexture:Bitmap = new CubeTexture() as Bitmap;  var myCube1:DisplayObject3D = rootNode.addChild(new Cube(new BitmapMaterial(cubeTexture.bitmapData), 100, 100, 100, 1, 1, 1), "myCube1");  myCube1.y = 50; } private function loop3D(event:Event):void{  du++;  if(du==360)du=0;   var newX:Number = 2000 * formatNum(Math.cos(du*TH), 3);  var newZ:Number = 2000 * formatNum(Math.sin(du*TH), 3);   camera.x = newX;  camera.z = newZ;      scene.renderCamera(camera); } private function formatNum(num:Number, cnt:Number):Number{  return Math.round(num * Math.pow(10, cnt)) / Math.pow(10, cnt); }}}
分享到:
评论

相关推荐

    Excel中的PV函数.pdf

    Excel中的PV函数.pdf 学习资料 复习资料 教学资源

    物联网教学实验系统

    物联网教学实验系统 CPU采用三星公司S5PV210

    嵌入式物联网教学实验系统

    S5PV210硬件平台作为核心网关,板载集成丰富 的功能接口,可搭载多种不同功能的传感器扩展 模块。 CES-EDU210-NET物联网教学实验系统配 套《嵌入式物联网高级实践教程》作为实验指导,全面而详尽的教程内容,产品化...

    【补充】计算机操作系统-6 并发程序设计1 (含PV操作 管程 消息) new1

    第六章 并发程序设计南京大学软件学院本主题教学目标了解程序的并发性与并发程序设计掌握临界区互斥及其解决方案熟练使用PV进行程序设计掌握Hoare管程掌握消息传递

    操作系统课堂教学.doc

    wait(full2) 取 signal(empty1) signal(empty2) 打印 until false 4、有一仓库存放产品,其容量为无限大,现有一个入库进程和两个出库进程分别放产品 和取产品,但对仓库的操作(放或取)不能同时进行,用pv操作...

    Android 教学实验箱 CES-EDU210B

    深圳市海天雄Android教学实验箱是基于安卓系统平台的实践型教学实验设备,集教、学、研为一体的多向系统平台。 理论与实践的结合,透过详尽的实验例程,更深层次、系统化的学习Android系统的相关技术,从系统架构...

    PV168-Java-seminar:PV168 期项目的存储库

    ### 课程组织 PV168 Spring 2015 教学包括讲座和练习,要获得学分,必须满足作业规定的条件(见下文)。 ###演讲讲座通常每两周举行一次,建议参加,因为假设学生知道讲座中涵盖的材料。 ###练习练习每周进行一次...

    操作系统教学应用课件

    操作系统重点部分课件,包括进程,同步互斥,PV操作,线程。

    JK160350-计算机操作系统原理教学大纲(计科)1

    2.能说明进程控制的基本原理和方法,并应用信号量机制和PV操作解决生产者-消费者问题、读者-写者问题等实际应用问题 3.能够阐释处理机调度和死锁基本原理和方法,

    瑞萨e2studio-电容触摸配置

    B站教学视频:https://www.bilibili.com/video/BV1vc411P7pV/ 瑞萨e2studio(25)----电容触摸配置(2) CSDN文字教程:https://blog.csdn.net/qq_24312945/article/details/130480372 B站教学视频:...

    利用P、V操作实现进程同步与互斥

    P、V操作实现进程同步与互斥是《操作系统》教学中的一个难点,通过示例给出了解决这类问题的一般模型。

    【传智播客黑马程序员重庆校区】Mongo查询方式(一).pdf

    随着互联网的高速发展,如今的软件项目在PV、UV、数据量等方面的要求也越来越高,其中针对不同的软件业务 场景,数据库又区分出关系数据库和非关系数据库,关系型数据库大家应该非常的熟悉,比如Mysql。今天我们主 ...

    中级软件设计师 (1)-看各大佬视频整理

    大概内容有: 数据的表示 数表示的范围 数据的表示-浮点数运算 计算机结构 计算机体系结构分类-Flynn ...(看B站《中级软件设计师教学视频--王勇》视频整理 中间夹杂一点博主:深夜代码视频内容。有错误见谅啦)

    基于MatLab的光圈变化图仿真 (2010年)

    基于等厚干涉的基本原理,对光学球面镜片生产中光圈变化的原理以及光圈识别的方法进行了详细的理论分析。...这对企业指导培训工人和检验人员具有积极的意义,同时可应用于“光学零件工艺”课程实验教学。

    PVsyst是为建筑师、工程师和研究人员设计的光伏软件

    PVSYST是为建筑师、工程师和研究人员设计的,也是一个非常有用的教学工具。可以说是光伏软件的瑞士刀。 主要特点: -完整的远程光伏系统设计 -光伏并网系统全面设计 -完整的光伏板、逆变器、气象数据数据库 -有用的3D...

    docsify-CnBlogs

    据专业的 CNZZ 后台统计,截至 2021-01-28 的历史累计数据:浏览次数(pv)为392313次,独立访客(uv)为185504位,IP为183509个; 截至 2021-01-28 静雅斋在 CNZZ 的排名为:299503;在博客园的排名为:1003,博客园内...

    P5-Make-Effective-Data-Visualization

    P5-Make-Effective-Data-Visualization ###Link zur aktuellen 版本: : ###Link zur ersten 版本: : 总结 - 原始数据来自 Acer(数据集 2012)... 以下是我用于制作动画的问题: ST77Q02 - 数学教学 - 额外帮助 S

    太阳能光伏板:光伏组件建模与Simulink-matlab开发

    本文介绍了使用 matlab/... 采用单二极管等效电路来研究典型 36 W 太阳能模块的 IV 和 PV 特性。 建议的模型设计有一个用户友好的图标和一个对话框,如 Simulink 模块库。 https://www.mediafire.com/?ktofcbm9w8f7gx5

    ARM Cortex-A8实战演练

    从简单介绍 A8 裸机基础实验慢慢深入到 Bootloader 开发、 Linux 系统开发、 Qt 编程再到项目实战。由浅及深,让初学者从“零”基础开始,慢慢深入了解和学习 A8。只要认真学习本书,我们深信,每个读者最后都能做出...

Global site tag (gtag.js) - Google Analytics