每天學一點flash(77)放樣
阿新 • • 發佈:2018-12-04
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
很多時候不會清楚這些圖形是怎樣來,因為加了一些意外的引數去就可能演變這種情況出現,看起來效果很有趣,在這裡我藉助了quickbox2d 的作者的其中的一些程式碼,進行修改,發現了另外一種放樣的好玩地方。我們知道3D放樣在建模的時候經常使用的一種方法,他原理有複製點的過程,我們在場景上看到圖形是點的幾何集合體。 這些點分佈在一個空間裡面,所在位置各不一樣,但是分佈出來的會構建成一種比較帶藝術感的視角效果。無論如何也好,這種發現總是會給予一種新的想法,新的思考方式。我們沒必要過於強調他會給給我們什麼利潤價值,至少能夠給過你一個激動的時刻那麼也是一個不錯的時刻,你覺得呢?
它的原理很簡單,通過在一個空間對某一點進行復制,並且設定它們的位置,它們所在空間並不一樣,但是構成了新的圖形符號。在3dsmax 這些放樣經常會用於製作一些不規則的圖形。效果也非常好。若果支援更加的填充那就更加刺激過癮,似乎這只是一個意向,但是我相信借用其他運算完全可以實現到。目前還是需要繼續去挖潛他裡面潛力。
[c-sharp] view plain copy print
- package
- {
- import flash.display.*;
- import flash.events.*;
- import flash.geom.*;
- public
- {
- 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);
- }
- }
- }