HomeMenu
Jesus · Bible · HTML · CSS · JS · PHP · SVG · Applications

Anaglyph

Example

Anaglyph

Code

package
{
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.BitmapDataChannel;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.geom.ColorTransform;
    import flash.geom.Point;
    import flash.ui.ContextMenu;

    import org.papervision3d.cameras.Camera3D;
    import org.papervision3d.events.InteractiveScene3DEvent;
    import org.papervision3d.materials.ColorMaterial;
    import org.papervision3d.materials.special.ParticleMaterial;
    import org.papervision3d.objects.DisplayObject3D;
    import org.papervision3d.objects.special.ParticleField;
    import org.papervision3d.render.BasicRenderEngine;
    import org.papervision3d.scenes.Scene3D;
    import org.papervision3d.view.BitmapViewport3D;

    public class Anaglyph extends Sprite
    {
        private var scene     :Scene3D;
        private var camera    :Camera3D;
        private var viewport  :BitmapViewport3D;
        private var renderer  :BasicRenderEngine;
        private var bitmap    :Bitmap;
        private var material  :ColorMaterial;
        private var material2 :ParticleMaterial;
        private var object    :Glasses;
        private var object2   :ParticleField;
        private var left      :String;

        public function Anaglyph()
        {
            var menu :ContextMenu = new ContextMenu();
            menu.hideBuiltInItems();
            contextMenu = menu;

            scene = new Scene3D();

            camera        = new Camera3D();
            camera.target = DisplayObject3D.ZERO;

            viewport = new BitmapViewport3D(640, 480, true, true, 0x000000, true, true);
            addChild(viewport);

            renderer = new BasicRenderEngine();

            bitmap = new Bitmap(new BitmapData(viewport.width, viewport.height, false, 0x000000));
            addChild(bitmap);

            material             = new ColorMaterial(0xffffff);
            material.interactive = true;

            material2             = new ParticleMaterial(0xffffff, 1);
            material2.doubleSided = true;

            object = new Glasses(material);
            object.addEventListener(InteractiveScene3DEvent.OBJECT_OVER, handleObjectOver);
            object.addEventListener(InteractiveScene3DEvent.OBJECT_OUT, handleObjectOut);
            object.addEventListener(InteractiveScene3DEvent.OBJECT_PRESS, handleObjectPress);
            scene.addChild(object);

            object2 = new ParticleField(material2);
            scene.addChild(object2);

            handleEnterFrame();
            //addEventListener(MouseEvent.MOUSE_DOWN, handleMouseDown);
            //addEventListener(MouseEvent.MOUSE_UP, handleMouseUp);
            //addEventListener(MouseEvent.MOUSE_OVER, handleMouseOver);
            addEventListener(MouseEvent.MOUSE_OUT, handleMouseOut);
        }

        private function handleEnterFrame(e:Event=null):void
        {
            movement();

            if ((bitmap.bitmapData.height != Math.round(stage.stageHeight)) ||
                (bitmap.bitmapData.width  != Math.round(stage.stageWidth))) {
                bitmap.bitmapData = new BitmapData(stage.stageWidth, stage.stageHeight, false, 0x000000);
            }

            //left
            camera.moveLeft(4);
            camera.target.moveLeft(4);
            renderer.renderScene(scene, camera, viewport);
            if (left == "green") {
                //viewport.transform.colorTransform = new ColorTransform(0, 1, 0, 1);
                bitmap.bitmapData.copyChannel(viewport.bitmapData, viewport.bitmapData.rect, new Point(), BitmapDataChannel.GREEN, BitmapDataChannel.GREEN);
            } else if (left == "blue") {
                //viewport.transform.colorTransform = new ColorTransform(0, 0, 1, 1);
                bitmap.bitmapData.copyChannel(viewport.bitmapData, viewport.bitmapData.rect, new Point(), BitmapDataChannel.BLUE, BitmapDataChannel.BLUE);
            } else {
                //viewport.transform.colorTransform = new ColorTransform(1, 0, 0, 1);
                bitmap.bitmapData.copyChannel(viewport.bitmapData, viewport.bitmapData.rect, new Point(), BitmapDataChannel.RED, BitmapDataChannel.RED);
            }

            //right
            camera.moveRight(8);
            camera.target.moveRight(8);
            renderer.renderScene(scene, camera, viewport);
            if (left == "green") {
                //viewport.transform.colorTransform = new ColorTransform(1, 0, 1, 1);
                bitmap.bitmapData.copyChannel(viewport.bitmapData, viewport.bitmapData.rect, new Point(), BitmapDataChannel.RED, BitmapDataChannel.RED);
                bitmap.bitmapData.copyChannel(viewport.bitmapData, viewport.bitmapData.rect, new Point(), BitmapDataChannel.BLUE, BitmapDataChannel.BLUE);
            } else if (left == "blue") {
                //viewport.transform.colorTransform = new ColorTransform(1, 1, 0, 1);
                bitmap.bitmapData.copyChannel(viewport.bitmapData, viewport.bitmapData.rect, new Point(), BitmapDataChannel.RED, BitmapDataChannel.RED);
                bitmap.bitmapData.copyChannel(viewport.bitmapData, viewport.bitmapData.rect, new Point(), BitmapDataChannel.GREEN, BitmapDataChannel.GREEN);
            } else {
                //viewport.transform.colorTransform = new ColorTransform(0, 1, 1, 1);
                bitmap.bitmapData.copyChannel(viewport.bitmapData, viewport.bitmapData.rect, new Point(), BitmapDataChannel.GREEN, BitmapDataChannel.GREEN);
                bitmap.bitmapData.copyChannel(viewport.bitmapData, viewport.bitmapData.rect, new Point(), BitmapDataChannel.BLUE, BitmapDataChannel.BLUE);
            }
            bitmap.bitmapData.copyChannel(viewport.bitmapData, viewport.bitmapData.rect, new Point(), BitmapDataChannel.ALPHA, BitmapDataChannel.ALPHA);

            //center
            camera.moveLeft(4);
            camera.target.moveLeft(4);
        }

        private function handleMouseDown(e:MouseEvent):void
        {
            addEventListener(Event.ENTER_FRAME, handleEnterFrame);
        }

        private function handleMouseUp(e:MouseEvent):void
        {
            removeEventListener(Event.ENTER_FRAME, handleEnterFrame);
        }

        private function handleMouseOver(e:MouseEvent):void
        {
            addEventListener(Event.ENTER_FRAME, handleEnterFrame);
        }

        private function handleMouseOut(e:MouseEvent):void
        {
            removeEventListener(Event.ENTER_FRAME, handleEnterFrame);
        }

        private function handleObjectOver(e:InteractiveScene3DEvent):void
        {
            viewport.containerSprite.buttonMode = true;
        }

        private function handleObjectOut(e:InteractiveScene3DEvent):void
        {
            viewport.containerSprite.buttonMode = false;
        }

        private function handleObjectPress(e:InteractiveScene3DEvent):void
        {
            if (left == "green") {
                left = "blue";
            } else if (left == "blue") {
                left = "red";
            } else {
                left = "green";
            }
        }

        private function movement():void
        {
            if (left == "red") {
                object.pitch(2);
                object2.pitch(2);
            } else if (left == "green") {
                object.roll(2);
                object2.roll(2);
            } else {
                object.yaw(2);
                object2.yaw(2);
            }
        }
    }
}

Download