particleの回転2
forked from particleの回転 (diff: 22)
ActionScript3 source code
/**
* Copyright gaziya ( http://wonderfl.net/user/gaziya )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/k33b
*/
package {
import flash.geom.Point
import flash.display.BitmapData
import flash.display.Bitmap
import flash.geom.PerspectiveProjection
import flash.geom.Matrix3D
import flash.events.Event
import flash.geom.Vector3D
import flash.display.Sprite
[SWF(width=465,height=465,frameRate=30)]
public class FlashTest extends Sprite {
public function FlashTest() {
var number:int = 10000
var length:Number = 0.5 //1
var points:Vector.<Vector3D> = new Vector.<Vector3D>
var n:int = number
while(n--) {
var vector:Vector3D = new Vector3D
vector.x = Math.sqrt(Math.random()) * length
var matrix:Matrix3D = new Matrix3D
matrix.appendRotation(Math.random()*360, Vector3D.X_AXIS)
matrix.appendRotation((Math.random()-0.5)*90, Vector3D.Y_AXIS)
matrix.appendRotation(Math.random()*360, Vector3D.Z_AXIS)
points.push(matrix.transformVector(vector))
}
var canvas:BitmapData = new BitmapData(stage.stageWidth,stage.stageHeight,false,0x0)
addChild(new Bitmap(canvas))
//var canvas:BitmapData
//addChild(new Bitmap(canvas = new BitmapData(stage.stageWidth,stage.stageHeight,false,0x0)))
var theta:Number = 0
var axis:Vector3D = new Vector3D(1,-2,0)
var projection:PerspectiveProjection = new PerspectiveProjection()
//projection.fieldOfView = 110
//projection.focalLength *= 0.5
projection.projectionCenter = new Point(0,0)
var proj_matrix:Matrix3D = projection.toMatrix3D()
addEventListener(Event.ENTER_FRAME, loop)
function loop(e:Event):void {
theta += 1
theta %= 360
var matrix:Matrix3D = new Matrix3D()
matrix.appendRotation(theta,axis)
matrix.append(proj_matrix)
canvas.lock()
canvas.fillRect(canvas.rect, 0x0)
var i:int = number
while (i--){
var vector:Vector3D = matrix.transformVector(points[i])
canvas.setPixel(vector.x+stage.stageWidth/2,vector.y+stage.stageHeight/2,0xffffff)
}
canvas.unlock()
}
}
}
}