Yeah, now when I update drag only on Mouse3D press it works ok(may be a
little fast transformation) but putting it onEnterFrame throws all sort of
NaN from Lens as well as the plains start flying away with the speed of
light

On Sat, Jul 24, 2010 at 6:08 PM, Fabrice3D <[email protected]> wrote:

> just added these,
> tho it was not generating any weird behaviors on my tests
>
> for test just made quick testclass, I was able drag on 3 planes with no
> errors
> (sended you the test class)
>
> Fabrice
>
>
>
> On Jul 24, 2010, at 5:00 PM, Michael Iv wrote:
>
> found two more places where break; misses...
> And it seems that only "xz" mode works well.
>
> On Fri, Jul 23, 2010 at 5:48 PM, Fabrice3D <[email protected]> wrote:
>
>> 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]
>>
>>
>>
>
>
> --
> 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]
>
>
>


-- 
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]

Reply via email to