My favorites | Sign in
Project Home Downloads Source
Checkout   Browse   Changes    
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
package com.everydayflash.cart.points3d {
import com.everydayflash.cart.core.AbstractSketch;
import com.everydayflash.cart.core.Pixel3D;

import flash.display.BitmapData;
import flash.events.MouseEvent;
import flash.filters.BlurFilter;
import flash.geom.ColorTransform;
import flash.geom.Matrix3D;
import flash.geom.PerspectiveProjection;
import flash.geom.Point;
import flash.geom.Vector3D;

/**
* @author bartekd
*/
public class Points3D2 extends AbstractSketch {

private var pts:Vector.<Pixel3D>;

private var projection:Matrix3D;
private var angleX:Number = 0;
private var angleY:Number = 0;
private var matrix:Matrix3D;

[Embed (source="pattern.png")]
private var Pattern:Class;
private var pattern:BitmapData;


override protected function init():void {
var p:PerspectiveProjection = new PerspectiveProjection();
p.focalLength = 400;
projection = p.toMatrix3D();
matrix = new Matrix3D();

pts = new Vector.<Pixel3D>();

pattern = new Pattern().bitmapData;

var rd:Number = 200;

for (var i:int = 0; i < 2500; i++) {
var r:Pixel3D = new Pixel3D(rdpos, rdpos, rdpos);
r.color = pattern.getPixel(i % 50, i / 50);
r.normalize();
r.x *= rd;
r.y *= rd;
r.z *= rd;
pts.push(r);
}


}

override protected function mouseDown(e:MouseEvent):void {
var rd:Number = 150 * Math.random();

for (var i:int = 0; i < 2500; i++) {
var r:Pixel3D = pts[i];
r.normalize();
r.x *= rd;
r.y *= rd;
r.z *= rd;
}
}

private function get rdpos():Number {
return 1 - (Math.random() * 2);
}

override protected function draw():void {
// clearBCanvas();
bcanvas.applyFilter(bcanvas, bcanvas.rect, new Point(), new BlurFilter(4,4,1));
bcanvas.colorTransform(bcanvas.rect, new ColorTransform(1,1,1,.8));

angleX -= (mouseX - sw/2) / sw/2 * 10;
angleY += (mouseY - sh/2) / sh/2 * 10;



for (var i:int = 0;i < pts.length; i++) {
matrix.identity();
matrix.appendRotation(angleX, new Vector3D(0, 0, 1));
matrix.appendRotation(angleY, new Vector3D(1, 0, 0));
matrix.appendTranslation(0, 0, 350);

var v:Pixel3D = pts[i];

var iv:Vector3D = matrix.transformVector(v);

var vz:Number = 1 - (iv.z / 500);
vz = Math.min(1, vz);
vz = Math.max(0, vz);

iv = projection.transformVector(iv);
iv.project();

var c:uint = (vz * 255) << 24 | v.color;

drawParticle(sw / 2 + iv.x, sh/2 + iv.y, c);
}
}

private function drawParticle(x:Number, y:Number, c:uint):void {
bcanvas.setPixel32(x, y, c);
bcanvas.setPixel32(x-1, y, c);
bcanvas.setPixel32(x, y-1, c);
bcanvas.setPixel32(x+1, y, c);
bcanvas.setPixel32(x, y+1, c);
}
}
}

Change log

r29 by drojdjou on Apr 23, 2009   Diff
[No log message]
Go to: 
Project members, sign in to write a code review

Older revisions

r27 by drojdjou on Apr 23, 2009   Diff
[No log message]
r20 by drojdjou on Mar 15, 2009   Diff
[No log message]
All revisions of this file

File info

Size: 2868 bytes, 113 lines
Powered by Google Project Hosting