thx Michael, fixed and in trunk > because someone was writting it probably at 3 am ;)(Fabrice?) probably true :)
Fabrice On Jul 23, 2010, at 3:51 PM, Michael Iv wrote: > There is a bug in Drag3D class, Actually it is just syntax miss, If you set > the plane to "zy" it would throw you " Unvalid plane description error ...", > because someone was writting it probably at 3 am ;)(Fabrice?) und did not put > after the last caase break ; terminator .So please , if someone can update it > on the trunk. > Nice weekend to everybody... > > > On Wed, Jun 2, 2010 at 11:24 AM, Fabrice3D <[email protected]> wrote: > interresting... > so I guess, fix would be to project from camera pos instead of mouse using > same ray dir... > thx for pointing that out, will try implement a fix to it asap. > > in meanwhile keep away from cam :)) > > Fabrice > > > On Jun 2, 2010, at 12:37 AM, abowman wrote: > > > Thanks for the test class. > > > > I was able to reproduce my problem in your code by placing the camera > > closer to the sphere and making the sphere smaller. Is there a bug in > > the Drag3D class or am I just not using the camera correctly? > > > > http://abowman.nozonenet.com/away3d/Drag3DTest.as > > http://abowman.nozonenet.com/away3d/Drag3DTest.swf > > > > Thanks for your help. > > > > BTW, I purchased the new Away3D book and I'm finding it very helpful. > > I was able to get my code working using that, but would really like to > > be able to use this Drag3D class rather than using a plane primitive. > > > > > > On Jun 1, 5:25 am, Fabrice3D <[email protected]> wrote: > >> I haven't debugged your code, (that would be your job :)) ) > >> but made quick test class using latest 3.5 to test class itself, all seams > >> fine to me. > >> > >> I would check if the mouse coordinates are correct in your case. > >> > >> Fabrice > >> > >> package{ > >> import flash.display.*; > >> import flash.events.*; > >> import away3d.containers.Scene3D; > >> import away3d.containers.View3D; > >> import away3d.core.base.Object3D; > >> import away3d.core.render.*; > >> import away3d.cameras.HoverCamera3D; > >> import away3d.events.MouseEvent3D; > >> import away3d.primitives.Sphere; > >> > >> import away3d.tools.Drag3D; > >> > >> public class Drag3DTest extends Sprite > >> { > >> public var scene:Scene3D; > >> private var view:View3D; > >> private var drag3d:Drag3D; > >> > >> private var cameraDistance:Number = 3000; > >> private var Hcamera:HoverCamera3D; > >> > >> private var move:Boolean = false; > >> private var lastPanAngle:Number; > >> private var lastTiltAngle:Number; > >> private var lastMouseX:Number; > >> private var lastMouseY:Number; > >> > >> public function Drag3DTest() > >> { > >> addEventListener(Event.ADDED_TO_STAGE, init); > >> } > >> > >> private function init(e:Event):void > >> { > >> initSWFEnvironement(); > >> populate(); > >> } > >> > >> private function initSWFEnvironement():void > >> { > >> stage.align = StageAlign.TOP_LEFT; > >> stage.scaleMode = StageScaleMode.NO_SCALE; > >> stage.stageFocusRect = false; > >> > >> Hcamera = new HoverCamera3D(); > >> view = new View3D({camera:Hcamera}); > >> scene = view.scene; > >> view.x = stage.stageWidth * .5; > >> view.y = stage.stageHeight * .5; > >> Hcamera.distance = cameraDistance; > >> Hcamera.tiltAngle = Hcamera.panAngle = 45; > >> > >> addChild(view); > >> //scene.addChild(new Trident(1000, true)); > >> > >> start(); > >> } > >> > >> public function start():void > >> { > >> if(!hasEventListener(Event.ENTER_FRAME)){ > >> addEventListener(Event.ENTER_FRAME, > >> refreshScreen); > >> > >> stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseIsDown); > >> stage.addEventListener(MouseEvent.MOUSE_UP, onMouseIsUp); > >> stage.addEventListener(Event.RESIZE, > >> onResize); > >> } > >> } > >> > >> private function populate():void > >> { > >> var _debugPrimitive:Sphere = new > >> Sphere({radius:50, material:null}); > >> scene.addChild(_debugPrimitive); > >> > >> drag3d = new Drag3D(view); > >> drag3d.plane = "xz"; > >> drag3d.debug = true; > >> drag3d.object3d = _debugPrimitive; > >> > >> Hcamera.hover(true); > >> > >> } > >> > >> private function refreshScreen(event:Event = null):void > >> { > >> > >> if (move) { > >> Hcamera.panAngle = 0.7*(stage.mouseX - > >> lastMouseX) + lastPanAngle; > >> Hcamera.tiltAngle = 0.7*(stage.mouseY - > >> lastMouseY) + lastTiltAngle; > >> } > >> > >> Hcamera.hover(); > >> > >> drag3d.updateDrag(); > >> > >> view.render(); > >> > >> } > >> > >> private function onResize(event:Event):void > >> { > >> view.x = stage.stageWidth *.5; > >> view.y = stage.stageHeight *.5; > >> } > >> > >> private function onMouseIsDown(event:MouseEvent):void > >> { > >> lastPanAngle = Hcamera.panAngle; > >> lastTiltAngle = Hcamera.tiltAngle; > >> lastMouseX = stage.mouseX; > >> lastMouseY = stage.mouseY; > >> move = true; > >> stage.addEventListener(Event.MOUSE_LEAVE, > >> onStageMouseLeave); > >> } > >> > >> private function onMouseIsUp(event:MouseEvent):void > >> { > >> move = false; > >> stage.removeEventListener(Event.MOUSE_LEAVE, > >> onStageMouseLeave); > >> } > >> > >> private function onStageMouseLeave(event:Event):void > >> { > >> move = false; > >> stage.removeEventListener(Event.MOUSE_LEAVE, > >> onStageMouseLeave); > >> } > >> > >> } > >> > >> } > >> > >> On Jun 1, 2010, at 1:08 AM, abowman wrote: > >> > >>> I tried calling the onResize function at the beginning of my init > >>> function and that didn't solve the problem. > >> > >>> On May 31, 4:54 pm, Fabrice3D <[email protected]> wrote: > >>>> looked very quickly at your code, > >>>> since class caches few values to spare calcs, try call resize(); before > >>>> you do setup the class. > >> > >>>> let me know how it goes, I will in case it doesn't fix your issue, try > >>>> your class tomorrow. > >> > >>>> also one detail, camera is standard of type Camera3D > >>>> so view.camera.x, y, z is enough, no need to declare one. > >> > >>>> Fabrice > >> > >>>> On May 31, 2010, at 6:09 PM, abowman wrote: > >> > >>>>> Thanks for the class Fabrice. > >> > >>>>> For some reason, when I move the mouse the sphere I'm dragging doesn't > >>>>> stay under the mouse. > >> > >>>>> http://abowman.nozonenet.com/away3d/dragTest.swf > >>>>> http://abowman.nozonenet.com/away3d/DragTest.as > >> > >>>>> What do I need to do to fix this? > >> > >>>>> Thanks > >> > >>>>> On May 21, 4:49 am, Fabrice3D <[email protected]> wrote: > >>>>>> Hi all, > >>>>>> I get many requests about this and I keep sending code... > >> > >>>>>> So I've added a new class dedicated to this particular functionality. > >>>>>> Drag3D. in tools.utils package > >> > >>>>>> you can use it to drag an object or just to get the intersection back. > >> > >>>>>> here an example of implementation > >> > >>>>>> import away3d.tools.utils.Drag3D > >>>>>> [... usual away code...] > >>>>>> private var drag3d:Drag3D; > >> > >>>>>> private function setUp():void > >>>>>> { > >>>>>> //the object you want to drag > >>>>>> var _debugPrimitive:Sphere = new > >>>>>> Sphere({radius:50, material:null}); > >>>>>> this.scene.addChild(_debugPrimitive); > >> > >>>>>> //declare instance > >>>>>> drag3d = new Drag3D(this.view); > >>>>>> //which plane do you want to drag on > >>>>>> // note here that plane != Plane primitive!! > >>>>>> drag3d.plane = "xz"; > >>>>>> // in case you want to check what you are doing > >>>>>> //drag3d.debug = true; > >>>>>> // to assign an object to be dragged > >>>>>> drag3d.object3d = _debugPrimitive; > >>>>>> } > >> > >>>>>> private function myEnterFrame(event:Event = null):void > >>>>>> { > >>>>>> //will update the object automatically on > >>>>>> mouse moves > >>>>>> drag3d.updateDrag(); // its is of course > >>>>>> handy to couple this with mouseEvents, like "if mouseisdown --> drag" > >> > >>>>>> // in case you want only the > >>>>>> positionintersectback > >>>>>> varintersect:Number3D = drag3d.getIntersect(); > >> > >>>>>> this.view.render(); > >>>>>> } > >> > >>>>>> next to 0,0,0 default, there are also options for custom positions of > >>>>>> plane, in case of AABB tests and even support for rotated planes > >>>>>> if you want object aligned calcs... > >> > >>>>>> here a little tech demohttp://www.closier.nl/playground/drag/drag3d.swf > >> > >>>>>> cheers, > >> > >>>>>> Fabrice > >> > >> > > > > > -- > Michael Ivanov ,Programmer > Neurotech Solutions Ltd. > Flex|Air |3D|Unity| > www.neurotechresearch.com > http://blog.alladvanced.net > http://www.meetup.com/GO3D-Games-Opensource-3D/ > Tel:054-4962254 > [email protected] > [email protected] >
