package {
import flash.display.*;
import flash.events.*;
import org.papervision3d.core.*;
import org.papervision3d.core.geom.*;
import org.papervision3d.core.math.*;
[SWF(width="400", height="400", frameRate="10", backgroundColor="#ffffff")]
public class Projection extends Sprite{
private var LEN:int = 80;
private var initialPoints:Array =
[new Number3D(LEN, +LEN, LEN),
new Number3D(LEN, +LEN, -LEN),
new Number3D(-LEN, +LEN, -LEN),
new Number3D(-LEN, +LEN, LEN),
new Number3D(LEN, -LEN, LEN),
new Number3D(LEN, -LEN, -LEN),
new Number3D(-LEN, -LEN, -LEN),
new Number3D(-LEN, -LEN, LEN)
];
private var ff:int = 0;
private var m:Matrix3D = new Matrix3D();
public function Projection():void
{
var r:Number = 500;
var l:Number = -500;
var t:Number = 500;
var b:Number = -500;
var n:Number = 500;
var f:Number = 1000;
m.n11 = 2*n/(r-l);
m.n13 = (r+l)/(r-l);
m.n22 = 2*n/(t-b);
m.n23 = (t+b)/(t-b);
m.n33 = -(f+n)/(f-n);
m.n34 = -2*n*f/(f-n);
m.n43 = -1;
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
private function onEnterFrame(e:*):void{
// rotation axis
var ra:Number3D = new Number3D(1,2,3);
ra.normalize();
// rotation matrix
var rotationMatrix:Matrix3D = Matrix3D.rotationMatrix(ra.x,ra.y,ra.z,(ff++)/180*Math.PI);
var points2D:Array = [];
for each(var pp:Number3D in initialPoints){
var p:Number3D = pp.clone();
// rotation
Matrix3D.multiplyVector(rotationMatrix,p);
// convert to 2D point
Matrix3D.multiplyVector(m,p);
p.x += 200; p.y = 200 - p.y;
points2D.push(p);
}
graphics.clear();
graphics.lineStyle(3,0xff,0.8);
graphics.drawCircle(points2D[0].x, points2D[0].y, 5);
graphics.moveTo(points2D[0].x, points2D[0].y);
for (var i:int = 1 ; i < 4; i++){
graphics.lineTo(points2D[i].x, points2D[i].y);
}
graphics.lineTo(points2D[0].x, points2D[0].y);
graphics.lineStyle(3,0xff0000,0.8);
graphics.moveTo(points2D[4].x, points2D[4].y);
for (i = 5 ; i < 8; i++){
graphics.lineTo(points2D[i].x, points2D[i].y);
}
graphics.lineTo(points2D[4].x, points2D[4].y);
graphics.lineStyle(3,0xff00,0.8);
for (i = 0 ; i < 4; i++){
graphics.moveTo(points2D[i].x, points2D[i].y);
graphics.lineTo(points2D[i+4].x, points2D[i+4].y);
}
}
}
}
Author:yamasv@gmail.com
コメント、トラックバック、リンクはお気軽に
-->
| 日 | 月 | 火 | 水 | 木 | 金 | 土 |
|---|---|---|---|---|---|---|
| - | - | - | - | - | 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 | - | - | - | - | - | - |