Papervision3D intersection test

by szbzs2004
Papervision3D intersection test
♥0 | Line 83 | Modified 2011-02-15 21:10:53 | MIT License
play

ActionScript3 source code

/**
 * Copyright szbzs2004 ( http://wonderfl.net/user/szbzs2004 )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/1KPh
 */

// Papervision3D intersection test
package {
    import flash.display.DisplayObject;
    
    import flash.events.Event;
    
    import org.papervision3d.view.BasicView;
    import org.papervision3d.lights.PointLight3D;
    import org.papervision3d.materials.shadematerials.PhongMaterial;
    import org.papervision3d.objects.DisplayObject3D;
    import org.papervision3d.objects.primitives.Sphere;    
    import org.papervision3d.render.QuadrantRenderEngine;
    
    import com.bit101.components.HUISlider;

    public class Pv3dTest extends BasicView {
        
        private const RADIUS:Number = 300;

        private var rlSlider:HUISlider;
        private var rrSlider:HUISlider;
        
        private var swSlider:HUISlider;
        private var shSlider:HUISlider;
        
        private var dstSlider:HUISlider;
        private var rotSlider:HUISlider;
           
        private var spheres:DisplayObject3D;

        private var light:PointLight3D;
        
        private var sphere1:Sphere = null;
        private var sphere2:Sphere = null;
              
        public function Pv3dTest() {

            spheres = new DisplayObject3D();
            scene.addChild(spheres);

            light = new PointLight3D();
            light.x = -RADIUS;
            light.y =  RADIUS;
            
            rlSlider = new HUISlider(this, 50, 380, "radiusL", changeRadiusL);
            rlSlider.setSliderParams(1, 2 * RADIUS, RADIUS);

            rrSlider = new HUISlider(this, 250, 380, "radiusR", changeRadiusR);
            rrSlider.setSliderParams(1, 2 * RADIUS, RADIUS);

            swSlider = new HUISlider(this, 50, 400, "segmentsW", changeSegments);
            swSlider.setSliderParams(Sphere.MIN_SEGMENTSW, 60, Sphere.DEFAULT_SEGMENTSW);
            swSlider.tick = 1;
            swSlider.labelPrecision = 0;
            
            shSlider = new HUISlider(this, 50, 420, "segmentsH", changeSegments);
            shSlider.setSliderParams(Sphere.MIN_SEGMENTSH, 60, Sphere.DEFAULT_SEGMENTSH);
            shSlider.tick = 1;
            shSlider.labelPrecision = 0;

            dstSlider = new HUISlider(this, 250, 400, "distance", move);
            dstSlider.setSliderParams(0, 4 * RADIUS, RADIUS);

            rotSlider = new HUISlider(this, 250, 420, "rotation", rotate);
            rotSlider.setSliderParams(0, 360, 0);
          
            makeSpheres(swSlider.value, shSlider.value, rlSlider.value, rrSlider.value, dstSlider.value);
            
//          renderer = new QuadrantRenderEngine(QuadrantRenderEngine.ALL_FILTERS);
            startRendering();
            
        }
        
        private function makeSpheres(segmentsW:int, segmentsH:int, rl:Number, rr:Number, dst:Number):void {
            if (sphere1 != null) {
                spheres.removeChild(sphere1);
                sphere1 = null;
            }
            sphere1 = new Sphere(new PhongMaterial(light, 0xFF0000, 0x111111, 1), 1, segmentsW, segmentsH);
            sphere1.scale = rl;
            sphere1.x = -dst / 2;
            spheres.addChild(sphere1);

            if (sphere2 != null) {
                spheres.removeChild(sphere2);
                sphere2 = null;
            }
            sphere2 = new Sphere(new PhongMaterial(light, 0xFFFF00, 0x111111, 1), 1, segmentsW, segmentsH);
            sphere2.scale = rr;
            sphere2.x = dst / 2;
            spheres.addChild(sphere2);
        }

        private function changeRadiusL(e:Event):void {
           sphere1.scale = e.target.value;
        }

        private function changeRadiusR(e:Event):void {
           sphere2.scale = e.target.value;
        }

        private function changeSegments(e:Event):void {
            makeSpheres(swSlider.value, shSlider.value, rlSlider.value, rrSlider.value, dstSlider.value);
        }
        
        private function rotate(e:Event):void {
            spheres.rotationY = e.target.value; 
        }

        private function move(e:Event):void {
            sphere1.x = -dstSlider.value / 2;
            sphere2.x =  dstSlider.value / 2;
        }

    }
}