particleの回転2

by gaziya forked from particleの回転 (diff: 22)
♥0 | Line 51 | Modified 2011-11-16 15:11:38 | MIT License
play

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()  
            }    
        }
    }
}