package { import alternativa.engine3d.core.Object3D; import alternativa.engine3d.lights.AmbientLight; import alternativa.engine3d.lights.OmniLight; import alternativa.engine3d.materials.VertexLightTextureMaterial; import alternativa.engine3d.primitives.Box; import alternativa.engine3d.resources.BitmapTextureResource; import flash.display.BitmapData; import org.libspark.alternativa3d.camera.CameraType; import org.libspark.alternativa3d.controllers.OrbitCameraController; import org.libspark.alternativa3d.view.AlternativaTemplate; [SWF(frameRate = "60")] public class MolehillPrimitive extends AlternativaTemplate { private var omniLight:OmniLight; private var wrap:Object3D; public function MolehillPrimitive() { super({ backgroundColor: 0x000000, cameraType:CameraType.ORBIT, antiAlias: 4, useDiagram: true }); } override protected function atInit():void { wrap = new Object3D(); scene.addChild(wrap); // スポットライト(一部分を照らす照明) omniLight = new OmniLight(0xFFFFFF, 500, 10000); scene.addChild(omniLight); // アンビエントライト(全体を照らす照明) var light:AmbientLight = new AmbientLight(0x444444); scene.addChild(light); // テクスチャ作成 var bmd:BitmapData = new BitmapData(32, 32, true, 0xFFFFFFFF); var texture:BitmapTextureResource = new BitmapTextureResource(bmd); var material:VertexLightTextureMaterial = new VertexLightTextureMaterial(texture); // Boxをランダムに配置 for (var i:int = 0; i < 200; i++) { var box:Box = new Box(200, 200, 200, 3, 3, 3); box.setMaterialToAllSurfaces(material); box.x = 3000 * (Math.random() - 0.5); box.y = 3000 * (Math.random() - 0.5); box.z = 3000 * (Math.random() - 0.5); box.scaleX = box.scaleY = box.scaleZ = .8 * Math.random() + .2; box.rotationX = 360 * Math.random(); box.rotationY = 360 * Math.random(); box.rotationZ = 360 * Math.random(); wrap.addChild(box); } } override protected function atPreRender():void { // なんとくなく回転させる wrap.rotationZ -= .005; // スポットカメラはカメラに追随させる omniLight.x = camera.x; omniLight.y = camera.y; omniLight.z = camera.z; } } }