papervision3d拖拽圆球
代码如下:
?
package{import flash.events.Event;import flash.events.MouseEvent;?import org.papervision3d.core.geom.renderables.Vertex3D;import org.papervision3d.core.math.Number3D;import org.papervision3d.core.math.Plane3D;import org.papervision3d.events.InteractiveScene3DEvent;import org.papervision3d.lights.PointLight3D;import org.papervision3d.materials.shadematerials.FlatShadeMaterial;import org.papervision3d.objects.primitives.Sphere;import org.papervision3d.view.BasicView;?[SWF(width="640", height="480", backgroundColor="#000000", frameRate="60")]public class DraggingASphere extends BasicView{private const NUM_SPHERES:int = 11;//声明球的个数private var planeToDragOn:Plane3D;private var currentSphere:Sphere;?private var light:PointLight3D;?public function DraggingASphere(){viewport.interactive = true;?camera.y = 400;?light = new PointLight3D(true);scene.addChild(light);?for(var i:int = 0; i < NUM_SPHERES; i++){var material:FlatShadeMaterial = new FlatShadeMaterial(light, 0xeeeeee, 0x2d2d2d, 10);material.interactive = true;var sphere:Sphere = new Sphere(material);sphere.x = (i - NUM_SPHERES/2) * 200;?scene.addChild(sphere);?sphere.addEventListener(InteractiveScene3DEvent.
OBJECT_PRESS, objectPressHandler);stage.addEventListener(MouseEvent.
MOUSE_UP, mouseUpHandler);}?var up:Number3D = new Number3D(0, 1, 0);planeToDragOn = new Plane3D(up, new Number3D(0,0,0));?startRendering(); }?private function objectPressHandler(event:InteractiveScene3DEvent):void{currentSphere = event.displayObject3D as Sphere;}?private function mouseUpHandler(event:MouseEvent):void{currentSphere = null;}override protected function onRenderTick(event:Event=null):void{var ray:Number3D = camera.unproject(viewport.containerSprite.mouseX, viewport.containerSprite.mouseY);ray = Number3D.add(ray, camera.position);?var cameraVertex3D:Vertex3D = new Vertex3D
(camera.x, camera.y, camera.z);var rayVertex3D:Vertex3D = new Vertex3D(ray.x, ray.y, ray.z);?var intersectPoint:Vertex3D = planeToDragOn.getIntersectionLine
(cameraVertex3D, rayVertex3D);?if(currentSphere){currentSphere.x = intersectPoint.x;currentSphere.y = intersectPoint.y;currentSphere.z = intersectPoint.z;}light.x = intersectPoint.x;light.y = intersectPoint.y + 100;light.z = intersectPoint.z;?renderer.renderScene(scene, camera, viewport);}}}?
(来自papervision3d官方网)
?