1. 程式人生 > >每天學一點flash(77)放樣

每天學一點flash(77)放樣

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

 

 

    很多時候不會清楚這些圖形是怎樣來,因為加了一些意外的引數去就可能演變這種情況出現,看起來效果很有趣,在這裡我藉助了quickbox2d 的作者的其中的一些程式碼,進行修改,發現了另外一種放樣的好玩地方。我們知道3D放樣在建模的時候經常使用的一種方法,他原理有複製點的過程,我們在場景上看到圖形是點的幾何集合體。 這些點分佈在一個空間裡面,所在位置各不一樣,但是分佈出來的會構建成一種比較帶藝術感的視角效果。無論如何也好,這種發現總是會給予一種新的想法,新的思考方式。我們沒必要過於強調他會給給我們什麼利潤價值,至少能夠給過你一個激動的時刻那麼也是一個不錯的時刻,你覺得呢?

  它的原理很簡單,通過在一個空間對某一點進行復制,並且設定它們的位置,它們所在空間並不一樣,但是構成了新的圖形符號。在3dsmax 這些放樣經常會用於製作一些不規則的圖形。效果也非常好。若果支援更加的填充那就更加刺激過癮,似乎這只是一個意向,但是我相信借用其他運算完全可以實現到。目前還是需要繼續去挖潛他裡面潛力。

 

     

    

[c-sharp] view plain copy print
?
  1. package   
  2. {  
  3.     import flash.display.*;  
  4.     import flash.events.*;  
  5.     import flash.geom.*;  
  6.     public
     class Main extends Sprite  
  7.     {  
  8.         private var canvas:BitmapData;  
  9.         private var points:Vector.<Number > ;  
  10.         private var vin:Vector.<Number > ;  
  11.         private var vout:Vector.<Number > ;  
  12.         private var uvts:Vector.<Number > ;  
  13.         private var dx:Number = 0;  
  14.         private var dy:Number = 0;  
  15.         private var matrix:Matrix3D;  
  16.            
  17.         //舞臺中心點   
  18.         private var centerX:Number = stage.stageWidth / 2;  
  19.         private var centerY:Number = stage.stageHeight / 2;  
  20.         private var pen:Shape=new Shape();  
  21.         public function Main()  
  22.         {  
  23.             init();  
  24.         }  
  25.   
  26.         private function init():void  
  27.         {          
  28.             points = new Vector.<Number >();  
  29.             uvts = new Vector.<Number>();  
  30.             vin = new Vector.<Number >();  
  31.             matrix=new Matrix3D();  
  32.             canvas = new BitmapData(550,400,false,0xFEB6B6);//建立畫布  
  33.             addChild(new Bitmap(canvas));  
  34.             addChild(pen);  
  35.             creatPoint();  
  36.             lath3D();  
  37.             render();  
  38.             addEventListener(Event.ENTER_FRAME,Run);  
  39.         }  
  40.   
  41.         private function Run(event:Event):void  
  42.         {  
  43.             render();  
  44.         }  
  45.   
  46.         //建立空間點集(x,y,z);  
  47.         private function creatPoint():void  
  48.         {  
  49.             var angle:Number = Math.PI / 180;  
  50.             var r:Number;  
  51.             var radius:Number = 100;  
  52.             for (var i:int=0; i<360; i++)  
  53.             {  
  54.                 r=radius * (1 +Math.sin(angle*i));//心形公式  
  55.                 var point:Point = Point.polar(r,angle * i);//極座標轉換笛卡爾座標  
  56.                 vin.push(point.x);  
  57.                 vin.push(point.y-100);  
  58.                 vin.push(150);  
  59.             }  
  60.         }  
  61.   
  62.         //進行放樣  
  63.         private function lath3D():void  
  64.         {  
  65.             var tVerts:Vector.<Number> = new Vector.<Number>();  
  66.             var nVerts:Vector.<Number> = new Vector.<Number>();  
  67.             for (var i:int=0; i<360; i+=3)  
  68.             {  
  69.                 matrix.appendRotation(8,Vector3D.Y_AXIS);  
  70.                 matrix.transformVectors(vin,tVerts);  
  71.                 nVerts = nVerts.concat(tVerts);  
  72.             }  
  73.             vin = nVerts.concat();  
  74.         }  
  75.   
  76.         //渲染  
  77.         private function render():void  
  78.         {  
  79.             rotationXY();  
  80.             canvas.lock();  
  81.             canvas.fillRect(canvas.rect,0xFEB6B6);  
  82.             var length:int = points.length;  
  83.             pen.graphics.moveTo(points[0],points[1]);  
  84.             for (var i:int=0; i<length; i+=2)  
  85.             {  
  86.                 canvas.setPixel(points[i],points[i+1],0xffffff);  
  87.             }  
  88.             canvas.unlock();  
  89.         }  
  90.   
  91.   
  92.         //旋轉  
  93.         private function rotationXY():void  
  94.         {  
  95.             dx += (mouseX - dx)/6;  
  96.             dy += (mouseY - dy)/6;  
  97.             matrix.identity();  
  98.             matrix.appendRotation(dx,Vector3D.Y_AXIS);  
  99.             matrix.appendRotation(dy,Vector3D.X_AXIS);  
  100.             matrix.appendTranslation(centerX, centerY,0);  
  101.             Utils3D.projectVectors(matrix, vin, points, uvts);  
  102.         }  
  103.   
  104.     }  
  105.   
  106. }  
package { import flash.display.*; import flash.events.*; import flash.geom.*; public class Main extends Sprite {  private var canvas:BitmapData;  private var points:Vector.<Number > ;  private var vin:Vector.<Number > ;  private var vout:Vector.<Number > ;  private var uvts:Vector.<Number > ;  private var dx:Number = 0;  private var dy:Number = 0;  private var matrix:Matrix3D;           //舞臺中心點   private var centerX:Number = stage.stageWidth / 2;  private var centerY:Number = stage.stageHeight / 2;     private var pen:Shape=new Shape();  public function Main()  {   init();  }  private function init():void  {      points = new Vector.<Number >();   uvts = new Vector.<Number>();   vin = new Vector.<Number >();   matrix=new Matrix3D();   canvas = new BitmapData(550,400,false,0xFEB6B6);//建立畫布   addChild(new Bitmap(canvas));   addChild(pen);   creatPoint();   lath3D();   render();   addEventListener(Event.ENTER_FRAME,Run);  }  private function Run(event:Event):void  {   render();  }  //建立空間點集(x,y,z);  private function creatPoint():void  {   var angle:Number = Math.PI / 180;   var r:Number;   var radius:Number = 100;   for (var i:int=0; i<360; i++)   {    r=radius * (1 +Math.sin(angle*i));//心形公式    var point:Point = Point.polar(r,angle * i);//極座標轉換笛卡爾座標    vin.push(point.x);    vin.push(point.y-100);    vin.push(150);   }  }  //進行放樣  private function lath3D():void  {   var tVerts:Vector.<Number> = new Vector.<Number>();   var nVerts:Vector.<Number> = new Vector.<Number>();   for (var i:int=0; i<360; i+=3)   {    matrix.appendRotation(8,Vector3D.Y_AXIS);    matrix.transformVectors(vin,tVerts);    nVerts = nVerts.concat(tVerts);   }   vin = nVerts.concat();  }  //渲染  private function render():void  {   rotationXY();   canvas.lock();   canvas.fillRect(canvas.rect,0xFEB6B6);   var length:int = points.length;   pen.graphics.moveTo(points[0],points[1]);   for (var i:int=0; i<length; i+=2)   {    canvas.setPixel(points[i],points[i+1],0xffffff);   }   canvas.unlock();  }  //旋轉  private function rotationXY():void  {   dx += (mouseX - dx)/6;   dy += (mouseY - dy)/6;   matrix.identity();   matrix.appendRotation(dx,Vector3D.Y_AXIS);   matrix.appendRotation(dy,Vector3D.X_AXIS);   matrix.appendTranslation(centerX, centerY,0);   Utils3D.projectVectors(matrix, vin, points, uvts);  } }}

 

 

 

 

 

 

 

 

 

           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述