forked from: flash on 2009-3-24
...
@author Romano (www.romano.su)
package
{
import alternativ5.engine3d.core.Camera3D;
import alternativ5.engine3d.core.Object3D;
import alternativ5.engine3d.core.Scene3D;
import alternativ5.engine3d.display.View;
import alternativ5.engine3d.materials.FillMaterial;
import alternativ5.engine3d.primitives.Sphere;
import alternativ5.utils.FPS;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.net.navigateToURL;
import flash.net.URLRequest;
/**
* ...
* @author Romano (www.romano.su)
*/
public class ColorSphere extends Sprite
{
private var scene:Scene3D;
private var view:View;
private var camera:Camera3D;
private var sphere:Sphere;
private var angle1:Number;
private var angle2:Number;
private var distance:Number = 300;
public function ColorSphere():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
// Создание сцены
scene = new Scene3D();
scene.root = new Object3D();
// Добавление камеры и области вывода
camera = new Camera3D();
scene.root.addChild(camera);
angle1 = Math.PI / 2;
angle2 = 0;
// выставляем камеру
changeCameraCoords();
view = new View();
addChild(view);
view.camera = camera;
view.interactive = true;
// создание сферы
sphere = new Sphere(100, 12, 12);
for (var i:int = 0; i < sphere.faces.length; i++) {
var color:Number = Math.random() * 0xFFFFFF;
sphere.createSurface([sphere.faces.toArray(true)[i].id], "temp"+i);
sphere.setMaterialToSurface(new FillMaterial(color, 1), "temp"+i);
}
scene.root.addChild(sphere);
// Запуск счётчика кадров
FPS.init(stage);
stage.addEventListener(Event.RESIZE, onResize);
stage.addEventListener(Event.ENTER_FRAME, onEnterFrame);
onResize(null);
}
private function changeCameraCoords():void
{
camera.x = distance * Math.sin(angle1) * Math.cos(angle2);
camera.y = distance * Math.sin(angle1) * Math.sin(angle2);
camera.z = distance * Math.cos(angle1);
camera.rotationZ = angle2 + Math.PI/2;
camera.rotationX = angle1 - Math.PI;
}
private function onResize(e:Event):void {
view.width = stage.stageWidth;
view.height = stage.stageHeight;
}
private function onEnterFrame(event:Event):void
{
angle2 += Math.PI / 180;
changeCameraCoords();
// Расчёт сцены
scene.calculate();
}
}
}