Fabrice where can I get your RayDebug debug class ? I tried to apply the screen offset but still no success.
Thanks On May 5, 3:13 pm, Michael Iv <[email protected]> wrote: > That is interesting point . I wll try this . Sorry I cant see the white > pixels , it is too far from the screen :) > > > > > > > > On Wed, May 5, 2010 at 4:07 PM, Fabrice3D <[email protected]> wrote: > > 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 > > ... > > read more »
