forked from: forked from: Implicit 3D Blobby
interactive implicit 3D blobby plot
more info here: http://actionsnippet.com/?p=1318
♥0 |
Line 66 |
Modified 2011-10-27 04:37:07 |
MIT License
archived:2017-03-30 22:02:34
ActionScript3 source code
/**
* Copyright bradsedito ( http://wonderfl.net/user/bradsedito )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/jtMG
*/
// forked from jondissed's forked from: Implicit 3D Blobby
// forked from shapevent's Implicit 3D Blobby
package {
// interactive implicit 3D blobby plot
// more info here: http://actionsnippet.com/?p=1318
import flash.display.*;
import flash.events.*;
import flash.geom.*;
[SWF(backgroundColor=0x000000)]
public class ImplicitBlobby extends MovieClip {
private var matrix:Matrix3D;
private var verts:Vector.<Number>;
private var pVerts:Vector.<Number>;
private var uvts:Vector.<Number>;
private var s:Number;
private var brush:BitmapData;
private var canvas:BitmapData;
private var dx:Number;
private var dy:Number;
private var dz:Number;
public function ImplicitBlobby(){
// init
matrix = new Matrix3D();
verts = new Vector.<Number>();
pVerts = new Vector.<Number>();
uvts = new Vector.<Number>();
for (var i:Number = -12; i<=12; i+=1) {
for (var j:Number = -12; j<=12; j+=1) {
for (var k:Number = -12; k<=12; k+=1) {
// blobby, from here www.iiit.net/techreports/ImplicitTR.pdf
s=Math.sqrt(i*i+j*j+k*k)-10;
if (s<=1 && s>=-1) {
verts.push(i * 10);
verts.push(j * 10);
verts.push(k * 10);
pVerts.push(0),pVerts.push(0);
uvts.push(0),uvts.push(0),uvts.push(0);
}
}
}
}
brush=new BitmapData(2,2,true,0x41FFFFFF);
canvas=new BitmapData(400,400,false,0x000000);
addChild(new Bitmap(canvas));
dx=0;
dy=0;
addEventListener(Event.ENTER_FRAME, onLoop);
}
// private methods
private function onLoop(evt:Event):void {
dx += (mouseX - dx)/4;
dy += (mouseY - dy)/4;
dz += 1;//(mouseY - dy)/4;
matrix.identity();
matrix.appendRotation(dy,Vector3D.X_AXIS);
matrix.appendRotation(dx,Vector3D.Y_AXIS);
matrix.appendRotation(dx,Vector3D.Z_AXIS);
matrix.appendTranslation(200, 200, 0);
Utils3D.projectVectors(matrix, verts, pVerts, uvts);
canvas.lock();
canvas.fillRect(canvas.rect, 0x000000);
//var p:Point = new Point();
var p:Vector3D = new Vector3D();
var pPoint:Point = new Point( p.x,p.y );
for (var i:int = 0; i<pVerts.length; i+=2)
{
p.x = pVerts[i];
p.y = pVerts[i+1];
//p.z = pVerts[i+1];
canvas.copyPixels(brush, brush.rect, pPoint, null, null, true);
}
canvas.unlock();
}
}
}