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
>>>>>>>>>>>>>> |3D|Unity|www.neurotechresearch.comhttp://
>>>>>>>>>>>>>> blog.alladvanced.nethttp://
>>>>>>>>>>>>>> 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.comhttp://
>>>>>>>>>>> blog.alladvanced.nethttp://www.meetup...
>>>>>>>>>>>>> Tel:054-4962254
>>>>>>>>>>>>> [email protected]
>>>>>>>>>>>>> [email protected]
>> 
>>>>>>>>>> --
>>>>>>>>>> Michael
>> 
>> ...
>> 
>> read more ยป

Reply via email to