[ODE] Bug in Ray-Trimesh collision implementation
Sawyer Larkin
sjlarkin at ouray.cudenver.edu
Sat Mar 19 01:19:12 MST 2005
Thanks guys I just wanted to let you know that everythings working and thanks
for all the help!!!
On Friday 18 March 2005 01:36 pm, Adam D. Moss wrote:
> Sawyer wrote:
> > Thanks this is exactly the information I needed to know. That said, it
> > didn't work.
>
> Uh-oh.
>
> > Here are the two compiling and non-crashing variations I tried, neither
> > of them fixed the problem.
> >
> > (RayProximity::UpdateCallback)
> > // Check for ray/geom intersections
> > if ( rayGeom && hitGeom )
> > {
> > dGeomRaySetParams((dxGeom*)rayGeom, 1, 1);
> > dGeomRaySetClosestHit((dxGeom*)rayGeom, 1);
> > n = dCollide(o1, o2, 1, &contact, sizeof(contact));
> > if ( n > 0 )
> > {
> > if (contact.depth < rayGeom->contactDepth)
> > {
> > //printf("%p %p %f \n", o1, o2, contact.depth);
> > rayGeom->contactDepth = contact.depth;
> > rayGeom->contactRetro = hitGeom->GetRetro();
> > rayGeom->contactFiducial = hitGeom->GetFiducial();
> > }
> > }
> > }
>
> Do you mean dGeomRaySetClosestHit((dxGeom*)o1 [or o2], 1);?
> Guessing by rayGeom->contactFiducial, which isn't an attribute of
> a dxGeom, rayGeom isn't a dxGeom (or you have subclassed it).
>
> [..]
>
> > dGeomRaySetClosestHit((dxGeom*)rayGeom, 1);
>
> [..]
>
> Same here.
>
> > Do I need to increase the number of collisions processed (if I just
> > increase the number above 1 I get a run-time crash, I would need to look
> > further into the size of the memory passed).
>
> I don't know if this would help for a ray-trimesh collision. If you
> want to try it then you can reasonably expect a crash if you're just
> passing in a pointer to a single contact struct:
> n = dCollide(o1, o2, 1, &contact, sizeof(contact));
> Instead you'd have to pass a pointer to a suitably-sized arrays of
> contact structs instead.
>
> --Adam
More information about the ODE
mailing list