I think I may know why you miss....
in demo I have offseted the screen, because coordinates flash are top left.
pixel = _view.camera.unproject(startx-400, starty+j-300);

here 400 and 300 being hardcoded as 1/2 values of my screen 800x600

Fabrice


On May 5, 2010, at 3:01 PM, Michael Iv wrote:

> I am quite sure that the ray class casts the ray in right direction , but the 
> problem that I could not understand was why no intersection was returned .
> In your example do you receive the intersection of these rays with the globe ?
> 
> 
> On Wed, May 5, 2010 at 3:51 PM, Fabrice3D <[email protected]> wrote:
> made little demo to show you thats this is probably what is going on in your 
> code.
> 
> --> this demo projects a stroke 8 px wide in center screen (800x600), in this 
> case at 0,0 to 0,400 x/y
> the ray debugger shows you the camera, viewport, and the stroke.
> the debug rays are using the unproject camera method. (debug rays projected 
> each 20 pixels only first column to stay friend with the flash player)
> as you can see the direction obtained once normalized, is what you want. And 
> also shows Ray class is not wrong.
> 
> Now, the sphere in the world is still object space. not having any of the 
> camera perpective.
> Changing camera after calcs to hovercam to explore, you can see the debug 
> trace shows that once you put yourself behind the camera
> that the result of the stroke does match the rays using the Ray class where 
> no perpective or lens corrections are applied.
> except its obvious that the rays do not fit the image where the white (the 
> hit) should be way smaller if in same space as camera
> 
> http://www.closier.nl/playground/RaySpace.swf
> 
> Again, I'll try improve that class to make it smarter.. its all a question of 
> time :)
> 
> Fabrice
> 
> 
> 
> On May 5, 2010, at 1:09 PM, Michael Iv wrote:
> 
>> I was looking at the following function in BitmapMaterial Class:
>> if(showNormals){
>>                 
>>                 _nn.rotate(tri.faceVO.face.normal, 
>> tri.view.cameraVarsStore.viewTransformDictionary[tri.source]);
>>                  
>>                 _sv0x = (tri.v0x + tri.v1x + tri.v2x) / 3;
>>                 _sv0y = (tri.v0y + tri.v1y + tri.v2y) / 3;
>>                  
>>                 _sv1x = (_sv0x - (30*_nn.x));
>>                 _sv1y = (_sv0y - (30*_nn.y));
>>                  
>>                 _session.renderLine(_sv0x, _sv0y, _sv1x, _sv1y, 0, 0xFF00FF, 
>> 1);
>>             }
>>         }
>> 
>> And I can see ( if I am right) that you are setting _nn roation multiplying 
>> face normal by face matrix  that was received from camera space .
>> May be that is what has to be done  when getting faces for getIntersection ?
>> 
>> On Tue, May 4, 2010 at 12:11 PM, devlander <[email protected]> wrote:
>> ok  Fabrice.
>> Please notify us if you can get something working ( this is a critical
>> feature for my project ).
>> 
>> Thanks for your support.
>> 
>> On May 4, 9:44 am, Fabrice3D <[email protected]> wrote:
>> > Looking at it asap as I need it as well...
>> >
>> > On May 4, 2010, at 7:18 AM, Michael Iv wrote:
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>> > > Now I can see I am not only one having that problem
>> >
>> > > Sent from my iPhone
>> >
>> > > On May 4, 2010, at 3:49 AM, devlander <[email protected]> wrote:
>> >
>> > >> =================================================================
>> > >> Please forget about my previous post (many copy&past mistakes in the
>> > >> code snippet)
>> > >> =================================================================
>> >
>> > >> Here is my code (corrected):
>> >
>> > >> private function _pickMesh(mesh:Mesh):PickingResult {
>> >
>> > >>     var pr:PickingResult = new PickingResult();  // Store picking
>> > >> data here
>> >
>> > >>     var rayPos:Number3D = view3D.camera.unproject(view3D.mouseX,
>> > >> view3D.mouseY);
>> >
>> > >>     var rayDir:Number3D = new Number3D();
>> > >>     rayDir.x = rayPos.x;
>> > >>     rayDir.y = rayPos.y;
>> > >>     rayDir.z = rayPos.z;
>> > >>     rayDir.normalize();
>> > >>     rayPos.add(rayPos, view3D.camera.position);
>> >
>> > >>     var ray:Ray = new Ray();
>> > >>     var pickedPoint:Number3D;
>> >
>> > >>     for each (var face:Face in mesh.faces) {
>> >
>> > >>                pickedPoint = ray.getIntersect(rayPos , rayDir ,
>> > >> face.v0.position , face.v1.position , face.v2.position);
>> >
>> > >>                if (pickedPoint!=null) {
>> > >>                        pr.hasHit = true;
>> > >>                        pr.point = pickedPoint;
>> > >>                        pr.face = face;
>> > >>                        break;
>> > >>                }
>> > >>        }
>> >
>> > >>        pr.mesh = mesh;
>> >
>> > >>        return pr;
>> >
>> > >> }
>> >
>> > >> The problem is I always get null.
>> >
>> > >> Note: Since my mesh is a child of an Objectcontainer3D element I have
>> > >> called mesh.applyRotations()
>> > >> to make sure all the mesh faces are computed relative to the world
>> > >> coord system.
>> >
>> > >> I suspect there is a problem in the computation of the ray params
>> > >> (position or direction).
>> >
>> > >> Fabrice can you confirm that the signature of the Ray.getIntersect
>> > >> method is as follow (no info is given in the class):
>> >
>> > >> p0: ray direction (or is it position ?)
>> > >> p1: ray position [in world coord system] (or is it direction?)
>> > >> v0: face.v0.position [in global world coord system]
>> > >> v1: face.v1.position [in global world coord system]
>> > >> v2: face.v2.position [in global world coord system]
>> >
>> > >> Thanks for any help on this.
>> >
>> > >> On May 4, 2:33 am, devlander <[email protected]> wrote:
>> > >>> Hello, i am having the exact same problem here.
>> >
>> > >>> I am trying to determine the intersection on a 3D object at a given
>> > >>> viewport location (view3D.mouseX, view3D.mouseY):
>> >
>> > >>> Here is my code:
>> >
>> > >>> private function _pickMesh(mesh:Mesh):PickingResult {
>> >
>> > >>>         var pr:PickingResult = new PickingResult();  // Store picking 
>> > >>> data
>> > >>> here
>> >
>> > >>>         var rayPos:Number3D = view3D.camera.unproject(view3D.mouseX,
>> > >>> view3D.mouseY);
>> >
>> > >>>         // info retreived from here
>> > >>>         
>> > >>> //http://www.mail-archive.com/[email protected]/msg09318.html
>> >
>> > >>>         var rayDir:Number3D = new Number3D();
>> > >>>        rayDir.x = pMouse.x;
>> > >>>        rayDir.y = pMouse.y;
>> > >>>        rayDir.z = pMouse.z;
>> > >>>        rayDir.normalize();
>> > >>>        rayPos.add(rayPos, _view3D.camera.position);
>> >
>> > >>>         var ray:Ray = new Ray();
>> > >>>         var pickedPoint:Number3D;
>> >
>> > >>>         for each (var face:Face in mesh.faces) {
>> >
>> > >>>                 pickedPoint = ray.getIntersect(rayPos , rayDir , 
>> > >>> face.v0.position ,
>> > >>> face.v1.position , face.v2.position);
>> >
>> > >>>                 if (pickedPoint!=null) {
>> > >>>                         pr.hasHit = true;
>> > >>>                         pr.point = pickedPoint;
>> > >>>                         pr.face = face;
>> > >>>                         break;
>> > >>>                 }
>> > >>>         }
>> >
>> > >>>         pr.mesh = mesh;
>> >
>> > >>>         return pr;
>> >
>> > >>> }
>> >
>> > >>> The problem is I always get null.
>> >
>> > >>> Note: Since my mesh is a child of an Objectcontainer3D element I have
>> > >>> called mesh.applyRotations()
>> > >>> to make sure all the mesh faces are computed relative to the world
>> > >>> coord system.
>> >
>> > >>> I suspect there is a problem in the computation of the ray params
>> > >>> (position or direction).
>> >
>> > >>> Fabrice can you confirm that the signature of the Ray.getIntersect
>> > >>> method is as follow (no info is given in the class):
>> >
>> > >>> p0: ray direction (or is it position ?)
>> > >>> p1: ray position [in world coord system] (or is it direction?)
>> > >>> v0: face.v0.position [in global world coord system]
>> > >>> v1: face.v0.position [in global world coord system]
>> > >>> v2: face.v0.position [in global world coord system]
>> >
>> > >>> Thanks
>> >
>> > >>> On May 4, 12:17 am, Michael Iv <[email protected]> wrote:
>> >
>> > >>>> Fabrice i am trying it already for 4 hours with Sphere , but it 
>> > >>>> returns null
>> > >>>> most of the time
>> >
>> > >>>> ///// it runs on enter frame////////////////
>> > >>>> for(var i:int=0;i<_sf.faces.length;++
>> > >>>> i){
>> >
>> > >>>> trace(_ray.getIntersect(_ray.orig,_ray.dir,_sf.faces[i].v0.position,_sf.faces[i].v1.position,_sf.faces[i].v2.position));
>> > >>>>    }
>> > >>>> and basi
>> >
>> > >>>> On Tue, May 4, 2010 at 1:15 AM, Fabrice3D <[email protected]> wrote:
>> > >>>>> dir, origin, v0, v1, v2
>> > >>>>> to check if a ray hits a triangle
>> >
>> > >>>>> Fabrice
>> >
>> > >>>>> On May 3, 2010, at 9:43 PM, Michael Iv wrote:
>> >
>> > >>>>> Someone can tell me what are* v0,v1,v2* in* 
>> > >>>>> Ray.getIntersect(p0:Number3D,
>> > >>>>> p1:Number3D, v0:Number3D, v1:Number3D, v2:Number3D):Number3D* ???
>> > >>>>> Just can't find any example explaining these
>> >
>> > >>>>> Thanks!
>> >
>> > >>>>> --
>> > >>>>> Michael Ivanov ,Programmer
>> > >>>>> Neurotech Solutions Ltd.
>> > >>>>> Flex|Air |3D|Unity|
>> > >>>>>www.neurotechresearch.com
>> > >>>>> Tel:054-4962254
>> > >>>>> [email protected]
>> > >>>>> [email protected]
>> >
>> > >>>> --
>> > >>>> Michael Ivanov ,Programmer
>> > >>>> Neurotech Solutions Ltd.
>> > >>>> Flex|Air |3D|Unity|www.neurotechresearch.com
>> > >>>> Tel:054-4962254
>> > >>>> [email protected]
>> > >>>> [email protected]
>> 
>> 
>> 
>> -- 
>> Michael Ivanov ,Programmer
>> Neurotech Solutions Ltd.
>> Flex|Air |3D|Unity|
>> www.neurotechresearch.com
>> Tel:054-4962254
>> [email protected]
>> [email protected]
>> 
> 
> 
> 
> 
> -- 
> Michael Ivanov ,Programmer
> Neurotech Solutions Ltd.
> Flex|Air |3D|Unity|
> www.neurotechresearch.com
> Tel:054-4962254
> [email protected]
> [email protected]
> 

Reply via email to