Thanks! I had just realized that. Thanks all for your help on this one. I'm slowly starting to figure this 3d stuff out... :-)
On Jun 15, 4:42 pm, Fabrice3D <[email protected]> wrote: > too busy on other things right now... but reading at your code... > > > Not sure why intersect.y is zero though... > > Look at the plane you defined, the location is at 0,0,0, you do test on x,z > plane (normal y is 1) , so of course y will allways return you > the same value at the plane origin, in this case: zero. > > You might want take a look at the Drag3D class, as many of the stuff you need > is in there. > > Fabrice > > On Jun 15, 2010, at 10:21 PM, JeffH wrote: > > > > > I end up with var intersect like: > > intersect: x:-244.96517085811377 y:0 z:-492.95774647887356 > > > If I set _3dObj.z = 0 then it just moves the object in the x axis. Or > > did you mean set the z to zero somewhere else? > > > The code below actually has a small error (_3dObj.z = intersect.y;) > > instead of (_3dObj.y = intersect.y;) but since intersect.y=0 it didn't > > affect anything. Not sure why intersect.y is zero though... > > > On Jun 15, 3:58 pm, Michael Iv <[email protected]> wrote: > >> set z value to zero , I think only then you will get exact view screen > >> coords. the problem is that when your 3d objects are in a distance from the > >> camera their position is indeed as you define it after unprojection 2d > >> coords. But because frustrum volume has a depth and because of perspective > >> projection the object 3d position relative to the screen changes.So you > >> need > >> to compensate it . > > >> On Tue, Jun 15, 2010 at 10:50 PM, JeffH <[email protected]> wrote: > >>> Just tried using a perspective lens... Seems to work better. Although > >>> I can't explain why the y value needs to be negative in order to move > >>> it up. I thought a (10,10) position on the screen would require (-220, > >>> 140) for a screen and view size of 460x320. If I put in the following > >>> coordinates the object ends up near the 10,10 stage position: > > >>> var ray:Number3D = view.camera.unproject(-220, -140); > >>> var cameraPosition:Number3D = new Number3D(view.camera.x, > >>> view.camera.y, view.camera.z); > >>> ray.add(ray, cameraPosition); > >>> var p:Plane3D = new Plane3D(); > >>> p.fromNormalAndPoint(new Number3D(0, 1, 0),new Number3D(0, 0, 0)); > >>> var intersect:Number3D = p.getIntersectionLineNumbers(cameraPosition, > >>> ray); > >>> _3dObj.x = intersect.x; > >>> _3dObj.z = intersect.y; > >>> _3dObj.z = intersect.z; > >>> view.render(); > > >>> On Jun 15, 3:10 pm, Michael Iv <[email protected]> wrote: > >>>> Tried perspective lens with default zoom?? > > >>>> On Tue, Jun 15, 2010 at 10:07 PM, JeffH <[email protected]> wrote: > >>>>> So I tried unsuccessfully using unproject like this: > > >>>>> Since _2dObj.x = 10; _2dObj.y = 10: > >>>>> var scenepos:Number3D = view.camera.unproject(10,10); // a point 10 > >>>>> pixels off the top left corner of the stage > >>>>> _3dObj.moveTo(scenepos.x,scenepos.y,scenepos.z); > > >>>>> This gives me the following approximate values (and so didn't move the > >>>>> 3D object to the upper left): > >>>>> scenepos.x = 0.2 , scenepos.y = 55 , scenepos.z = 82 > > >>>>> Is it something to do with my camera settings?: > > >>>>> view.camera = new HoverCamera3D({zoom:50}); > >>>>> view.camera.lens = new OrthogonalLens(); > >>>>> view.camera.position = new Number3D(0, -675, -1000); > >>>>> view.camera.lookAt(new Number3D(0, 0, 0)); > > >>>>> On Jun 15, 2:21 pm, Michael Iv <[email protected]> wrote: > >>>>>> I don't have a code for this exact scenario but you can doit this > >>> way: > >>>>>> Create a dummy object , any kind of sprite (can be invisible if you > >>> need) > >>>>> or > >>>>>> even generic Point class of flash.Get it to the position of view > >>> where > >>>>> you > >>>>>> want your 3d object to move in 2d . Unproject the 2d coordinates into > >>> 3d > >>>>>> space using camera.unproject() . This method returns Number3d that is > >>>>>> scene3d position of your object Then tween your 3d object to that > >>>>> position. > >>>>>> I think that should work for you. > >>>>>> :) > > >>>>>> On Tue, Jun 15, 2010 at 8:09 PM, JeffH <[email protected]> wrote: > >>>>>>> Hi Michael, > > >>>>>>> I really appreciate your help on this. Unfortunately, I feel like > >>> I'm > >>>>>>> flying blind. The docs don't indicate what unproject does so I'm > >>>>>>> unclear how to proceed. What would be really helpful is if you > >>> could > >>>>>>> post some code that would accomplish the following: > > >>>>>>> Given a stage size of 480x320 and a view that is similar in size > >>> but > >>>>>>> centered, move a 3d object from position 0,0,0 to the stage > >>> position > >>>>>>> 0,0. That is, move the 3D object from the center of the stage to > >>> the > >>>>>>> top left corner. If you could show me how unproject works with this > >>>>>>> example, that would be great! > > >>>>>>> Thanks again. > > >>>>>>> On Jun 15, 12:32 pm, Michael Iv <[email protected]> wrote: > >>>>>>>> Do unproject ! > > >>>>>>>> Sent from my iPhone > > >>>>>>>> On Jun 15, 2010, at 7:08 PM, JeffH <[email protected]> wrote: > > >>>>>>>>> I'm looking for: > > >>>>>>>>> screenPlace(view.camera, 2Dobject, 3Dobject) > > >>>>>>>>> function screenPlace(camera,obj2D,obj3D):void { > >>>>>>>>> some code > >>>>>>>>> obj3D.x = something > >>>>>>>>> obj3D.y = something > >>>>>>>>> } > > >>>>>>>>> Given a 3d object and a 2d location (from the stage), move my > >>> 3D > >>>>>>>>> object so that it sits on the 2d object's screen position. > > >>>>>>>>> On Jun 15, 11:40 am, Michael Iv <[email protected]> wrote: > >>>>>>>>>> yes it does , isn't it what you need? > > >>>>>>>>>> On Tue, Jun 15, 2010 at 5:36 PM, JeffH <[email protected]> > >>> wrote: > >>>>>>>>>>> Sorry, I meant "But isn't this is returning the 3D coords for > >>> a > >>>>> 2D > >>>>>>>>>>> point based on a 3D > >>>>>>>>>>> objects position?" > > >>>>>>>>>>> On Jun 15, 10:35 am, JeffH <[email protected]> wrote: > >>>>>>>>>>>> But isn't this is returning the 3D coords for a 3D point > >>> based > >>>>> on > >>>>>>>>>>>> a 3D > >>>>>>>>>>>> objects position? I think I need to do the opposite. Move a > >>> 3D > >>>>>>>>>>>> object > >>>>>>>>>>>> (its z=0 btw) to a 2D point based on an object on the stage. > >>>>>>>>>>>> Example, > >>>>>>>>>>>> move my 3D boat to a marker on a river where the marker is a > >>> 2D > >>>>>>>>>>>> flash > >>>>>>>>>>>> object on the stage. > > >>>>>>>>>>>> On Jun 15, 10:24 am, Michael Iv <[email protected]> > >>> wrote: > > >>>>>>>>>>>>> You are almost correct but you have got to give an offset > >>> to > >>>>> the > >>>>>>>>>>> coordiantes > >>>>>>>>>>>>> as view coord system is different from Scene3D > > >>>>>>>>>>>>> _spriteX=_screenVertex.x+_view.width*.5; > >>>>>>>>>>>>> _spriteY=_screenVertex.y + _view.height*.5; > > >>>>>>>>>>>>> On Tue, Jun 15, 2010 at 5:10 PM, JeffH <[email protected]> > >>>>> wrote: > >>>>>>>>>>>>>> Hi Michael, > > >>>>>>>>>>>>>> I'm probably just missing something really easy here but > >>> I've > >>>>>>>>>>>>>> seen > >>>>>>>>>>> the > >>>>>>>>>>>>>> following example code which just seems to be for moving a > >>> 2D > >>>>>>>>>>>>>> object > >>>>>>>>>>>>>> to a point in the 3D space. Can you show me an example of > >>> how > >>>>> I > >>>>>>>>>>>>>> would > >>>>>>>>>>>>>> move a 3D object based on a 2D point? Thanks for your > >>> help! > > >>>>>>>>>>>>>> screenPlace(view.camera, myMovieClip, 3Dobject) > > >>>>>>>>>>>>>> function screenPlace(camera,who,whob):void { > >>>>>>>>>>>>>> var sc:ScreenVertex; > >>>>>>>>>>>>>> sc = camera.screen(whob) > >>>>>>>>>>>>>> who.x = sc.x + view.x; > >>>>>>>>>>>>>> who.y = sc.y + view.y; > >>>>>>>>>>>>>> } > > >>>>>>>>>>>>>> On Jun 15, 9:36 am, Michael Iv <[email protected]> > >>> wrote: > >>>>>>>>>>>>>>> use ScreenVertex coordinates by accessing camera.screen() > >>>>>>>>>>>>>>> method . > >>>>>>>>>>>>>>> :) > > >>>>>>>>>>>>>>> On Tue, Jun 15, 2010 at 4:34 PM, JeffH < > >>> [email protected]> > >>>>>>>>>>>>>>> wrote: > >>>>>>>>>>>>>>>> Hi all. I wanted to get the experts' opinions on the > >>> best > >>>>> way > >>>>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>> accomplish what I need to do. I have a 3D object (a > >>> boat) > >>>>>>>>>>>>>>>> that is > >>>>>>>>>>> in a > >>>>>>>>>>>>>>>> view with the camera set to a position and roll (45) to > >>> try > >>>>> and > >>>>>>>>>>>>>>>> achieve a "simcity" look. The settings are like this: > > >>>>>>>>>>>>>>>> view.camera.x = 675; view.camera.y = -675; view.camera.z > >>> = > >>>>>>>>>>>>>>>> -1300; > >>>>>>>>>>>>>>>> view.camera.roll(45); view.camera.lookAt(new Number3D(0, > >>> 0, > >>>>>>>>>>>>>>>> 0)); > > >>>>>>>>>>>>>>>> What I want to do is to move this object based on 2D > >>> points > >>>>>>>>>>> located on > >>>>>>>>>>>>>>>> the stage (for example, a path along a river). What is > >>> the > >>>>> best > >>>>>>>>>>> way to > >>>>>>>>>>>>>>>> do this? I did try converting 2D points to 3D by trying > >>> to > >>>>> get > >>>>>>>>>>> the > >>>>>>>>>>>>>>>> intersect of a ray off a plane but it doesn't seem to > >>> work. > >>>>> Not > >>>>>>>>>>> sure > >>>>>>>>>>>>>>>> if it is because I have a camera roll... I tried this > >>> based > >>>>> on > >>>>>>>>>>> some > >>>>>>>>>>>>>>>> other posts (where my 2D point is the var pt): > > >>>>>>>>>>>>>>>> var plane:Plane3D = new Plane3D(); > >>>>>>>>>>>>>>>> plane.fromNormalAndPoint(new Number3D(0, 1, 0), new > >>>>> Number3D(0, > >>>>>>>>>>> 0, > >>>>>>>>>>>>>>>> 0)); > >>>>>>>>>>>>>>>> var cameraPosition:Number3D = new > >>> Number3D(view.camera.x, > >>>>>>>>>>>>>>>> view.camera.y, view.camera.z); > >>>>>>>>>>>>>>>> var ray:Number3D = view.camera.unproject(pt.x, pt.y); > >>>>>>>>>>>>>>>> ray.add(ray, cameraPosition); > >>>>>>>>>>>>>>>> var intersect:Number3D = > >>>>>>>>>>>>>>>> plane.getIntersectionLineNumbers(cameraPosition, ray); > > >>>>>>>>>>>>>>>> But, intersect.x does not seem to align with pt.x on the > >>>>>>>>>>>>>>>> screen. > >>>>>>>>>>>>>>>> Perhaps I am misinterpreting how this should work? > >>> Should I > >>>>> try > >>>>>>>>>>> to > >>>>>>>>>>>>>>>> orient the stage (Flash CS4) the same way or can I leave > >>>>> that > >>>>>>>>>>> "flat" > >>>>>>>>>>>>>>>> and translate 2D coordinates to the 3D space? > > >>>>>>>>>>>>>>>> Anyway, thanks for any guidance! > > >>>>>>>>>>>>>>> -- > >>>>>>>>>>>>>>> Michael Ivanov ,Programmer > >>>>>>>>>>>>>>> Neurotech Solutions Ltd. > >>>>>>>>>>>>>>> Flex|Air > > ... > > read more »
