[ODE] cylinder plane bug
Tomek Klin
klinikk at o2.pl
Tue Sep 19 06:46:44 MST 2006
bad link
http://www.klinik.freehost.pl/filmiki/cylinder_plane_bug.avi
> Hi,
> I find one bug in cylinder vs plane collide.
> www.klinik.frehost.pl/filmiki/cylinder_plane_bug.avi
> this is hapend when center of bottom disk intersect a plane.
> I fixed this bug, but a think that problem is in isect_disc_plane(...)
> or in isect_plane_plane(...)
> collide_cylinder_plane.cpp (line 335)
> if (top_disc_does_intersect)
> {
> + if (dDOT(doi_top,planenorm)>0)
> + dVector3Scale(doi_top,-1);
> dContactGeom *Contact = SAFECONTACT(flags, contact, nContacts, skip);
> dVector3 tmp;
> dVector3Copy(doi_top, tmp);
> dVector3Scale(tmp, radius);
> dVector3Add(disc_top_pos, tmp, Contact->pos);
> // Note: ODE convention is: normal points *into* g1
> Contact->g1 = cylgeom;
> Contact->g2 = planegeom;
> dVector3Copy(planenorm, Contact->normal);
> dReal d = depth_top * dDOT(planenorm, doi_top);
> Contact->depth = dFabs(d);
> nContacts++;
> }
> if (bot_disc_does_intersect)
> {
> + if (dDOT(doi_bot,planenorm)>0)
> + dVector3Scale(doi_bot,-1);
> dContactGeom *Contact = SAFECONTACT(flags, contact, nContacts, skip);
> dVector3 tmp;
> dVector3Copy(doi_bot, tmp);
> dVector3Scale(tmp, radius);
> dVector3Add(disc_bot_pos, tmp, Contact->pos);
> // Note: ODE convention is: normal points *into* g1
> Contact->g1 = cylgeom;
> Contact->g2 = planegeom;
> dVector3Copy(planenorm, Contact->normal);
> dReal d = depth_bot * dDOT(planenorm, doi_bot);
> Contact->depth = dFabs(d);
> nContacts++;
> }
> ps. I'm sorry for my english :)
--
Pozdrowienia,
Tomek Klin
More information about the ODE
mailing list