每天学一点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

这里写图片描述

猜你喜欢

转载自blog.csdn.net/truhfcg/article/details/83919864