flash on 2010-8-13
♥0 |
Line 80 |
Modified 2010-08-13 08:31:30 |
MIT License
archived:2017-03-20 10:12:39
ActionScript3 source code
/**
* Copyright virtualex ( http://wonderfl.net/user/virtualex )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/fk7o
*/
package
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.events.Event;
import flash.geom.Point;
import flash.geom.Rectangle;
import flash.display.Loader;
import flash.system.LoaderContext;
import flash.display.LoaderInfo;
import flash.net.URLRequest;
import org.papervision3d.core.proto.MaterialObject3D;
import org.papervision3d.materials.BitmapMaterial;
import org.papervision3d.objects.DisplayObject3D;
import org.papervision3d.objects.primitives.Plane;
import org.papervision3d.objects.primitives.Sphere;
import org.papervision3d.view.BasicView;
[SWF(width="900", height="480", backgroundColor="#000000", frameRate="31")]
public class SlicedPlane extends BasicView
{
// [Embed(source="s/spain-casa-la-pedrera.jpg")]
//private var bannerAsset:Class;
private static const IMAGE_WIDTH:Number = 260;//680;
private static const IMAGE_HEIGHT:Number = 280;//452;
//260px × 280px
private static const NUM_SLICES:int = 4;
private var planeContainer:DisplayObject3D = new DisplayObject3D();
private var loader:Loader = new Loader( );
//private var url:String = "http://www.frunzenskayaunderground.ru/blog/uploads/2008/10/casa5.jpg";
private var url:String = "http://www.ujakropolisz.hu/files/ua_images/STATIKUS/Kultura/CIK_labirintus_m_3.jpg";
// private var url:String = "http://www.nikonsmallworld.com/images/world.jpg";
private var bd: BitmapData;
//private var bm2:Bitmap;
private var planeArray:Array;
public function SlicedPlane()
{
super(900, 480);
opaqueBackground = 0x000000;
camera.focus = 100;
camera.zoom = 10;
init();
}
private function init():void {
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE , complete);
loader.load(new URLRequest(url), new LoaderContext(true));
}
private function complete(e:Event):void {
var loaderInfo:LoaderInfo = e.target as LoaderInfo;
loaderInfo.removeEventListener(Event.COMPLETE , complete);
// scene.addChild(new Sphere());
var bannerBitmap:Bitmap = loaderInfo.content as Bitmap;
// var bmd:BitmapData = bm.bitmapData;
// var bannerBitmap:Bitmap = new bannerAsset() as Bitmap;
/* for(var i:int = 0; i < NUM_SLICES; i++)
{
var slice:BitmapData = new BitmapData(IMAGE_WIDTH / NUM_SLICES, IMAGE_HEIGHT);
var sourceRectangle:Rectangle = new Rectangle(i * IMAGE_WIDTH / NUM_SLICES, 0, IMAGE_WIDTH / NUM_SLICES, IMAGE_HEIGHT);
slice.copyPixels(bannerBitmap.bitmapData, sourceRectangle, new Point(0, 0));
var material:MaterialObject3D = new BitmapMaterial(slice);
material.doubleSided = true;
var plane:Plane = new Plane(material);
plane.x = i * IMAGE_WIDTH / NUM_SLICES - IMAGE_WIDTH / 2;
plane.rotationX = 360 / NUM_SLICES * i;
planeContainer.addChild(plane);
}
*/
planeArray = new Array ();
/* var i:int = 0;
var j:int = 0; */
for(var i:int = 0; i <NUM_SLICES; i++) { //
planeArray[i] = new Array();
for(var j:int = 0; j < NUM_SLICES; j++) { // NUM_SLICES*/
var slice:BitmapData = new BitmapData(IMAGE_WIDTH / NUM_SLICES, IMAGE_HEIGHT/ NUM_SLICES);
var sourceRectangle:Rectangle = new Rectangle(i * IMAGE_WIDTH / NUM_SLICES, j * IMAGE_HEIGHT / NUM_SLICES, IMAGE_WIDTH / NUM_SLICES, IMAGE_HEIGHT / NUM_SLICES);
slice.copyPixels(bannerBitmap.bitmapData, sourceRectangle, new Point(0, 0));
var material:MaterialObject3D = new BitmapMaterial(slice);
material.doubleSided = true;
var plane:Plane = new Plane(material);
plane.x = ((i * IMAGE_WIDTH) / NUM_SLICES) - (IMAGE_WIDTH / 2);
plane.y = ((((NUM_SLICES-1)-j) * IMAGE_HEIGHT) / NUM_SLICES) -( IMAGE_HEIGHT / 2);
//plane.y = ((NUM_SLICES-1)-j * IMAGE_HEIGHT) / NUM_SLICES+IMAGE_HEIGHT/2; // - IMAGE_HEIGHT/ 4;
planeArray[i][j]= plane;
scene.addChild(plane);
// plane.rotationX = 360 / NUM_SLICES * i;
//planeContainer.addChild(plane);
}
}
// scene.addChild(planeContainer);
startRendering();
}
public function completeHandler(event:Event):void
{
// addChild(loader);
/* for(var i:int = 0; i < NUM_SLICES; i++)
{
var slice:BitmapData = new BitmapData(IMAGE_WIDTH / NUM_SLICES, IMAGE_HEIGHT);
var sourceRectangle:Rectangle = new Rectangle(i * IMAGE_WIDTH / NUM_SLICES, 0, IMAGE_WIDTH / NUM_SLICES, IMAGE_HEIGHT);
slice.copyPixels(BitmapData(loader.content), sourceRectangle, new Point(0, 0));
var material:MaterialObject3D = new BitmapMaterial(slice);
material.doubleSided = true;
var plane:Plane = new Plane(material);
plane.x = i * IMAGE_WIDTH / NUM_SLICES - IMAGE_WIDTH / 2;
plane.rotationX = 360 / NUM_SLICES * i;
planeContainer.addChild(plane);
}
scene.addChild(planeContainer);
*/
}
override protected function onRenderTick(event:Event=null):void
{
var plane:Plane;
for(var i:int = 0; i < NUM_SLICES; i++) {
for(var j:int = 0; j < NUM_SLICES; j++) {
plane = planeArray[i][j];
plane.rotationX += Math.sin(j*i-1);
plane.rotationY += Math.sin(j*i-1);
}
}
//planeContainer.rotationX += 2;
super.onRenderTick(event);
}
}
}