sphere
♥0 |
Line 57 |
Modified 2011-12-15 17:28:54 |
MIT License
archived:2017-03-20 08:56:29
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/zXwe
*/
package {
import flash.geom.PerspectiveProjection;
import flash.utils.getTimer;
import flash.geom.Vector3D;
import flash.geom.Utils3D;
import flash.geom.Matrix3D;
import flash.events.Event;
import flash.display.Sprite;
public class FlashTest extends Sprite {
public function FlashTest() {
var sphere:Object = new Object
sphere.vertices = new Vector.<Number>
sphere.indices = new Vector.<int>
var xSegs:uint = 24
var ySegs:uint = 16
for (var y:int=0; y <= ySegs; y++) {
for (var x:int=0; x <= xSegs; x++) {
sphere.vertices.push(
Math.sin(y/ySegs*Math.PI)*Math.cos(x/xSegs*2*Math.PI),
Math.cos(y/ySegs*Math.PI),
Math.sin(y/ySegs*Math.PI)*Math.sin(x/xSegs*2*Math.PI)
)
var i:int = (xSegs+1)*y+x
if (x < xSegs && y < ySegs) {
sphere.indices.push(
i, i+1, i+xSegs+1,
i+1, i+xSegs+2, i+xSegs+1
)
}
}
}
var pers:PerspectiveProjection = new PerspectiveProjection
var persMatrix:Matrix3D = pers.toMatrix3D()
var worldMatrix:Matrix3D = new Matrix3D
addEventListener(Event.ENTER_FRAME, function(e:Event):void{
with (worldMatrix) {
identity()
appendRotation(getTimer()*0.03,Vector3D.Y_AXIS)
appendRotation(45,Vector3D.X_AXIS)
appendTranslation(0,0,-3)
append(persMatrix)
}
var persVerts:Vector.<Number> = new Vector.<Number>
var uvtData:Vector.<Number> = new Vector.<Number>
Utils3D.projectVectors(worldMatrix, sphere.vertices, persVerts, uvtData)
persVerts.map(function(item:Number, index:int, vector:Vector.<Number>):void {
vector[index] += (index%2==0) ? stage.stageWidth/2 : stage.stageHeight/2
})
with (graphics) {
clear()
lineStyle(0,0x0,0.5)
drawTriangles(persVerts, sphere.indices, uvtData, 'negative')
}
})
}
}
}