here you go...
Fabrice On May 5, 2010, at 4:37 PM, devlander wrote: > 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 ยป
RayDebugger.as
Description: application/applefile
