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]
