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 >>> > >>>>> 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] > > > -- Michael Ivanov ,Programmer Neurotech Solutions Ltd. Flex|Air |3D|Unity| www.neurotechresearch.com Tel:054-4962254 [email protected] [email protected]
