решил писать проЭкт на с#(чтоб быстро и на венде работало без геморроя), но, похоже, геморрой вылез в другом месте. Я использую биндинги Tao.Ode 1.3.0.1 и Ode 0.7. Короче дело вот в чем: callback функция public static void dNearCallbackFunc( IntPtr data, IntPtr o1, IntPtr o2 ) { IntPtr b1 = Ode.dGeomGetBody (o1); IntPtr b2 = Ode.dGeomGetBody (o2); if (b1 == IntPtr.Zero || b2==IntPtr.Zero) return; if (Ode.dAreConnected(b1,b2)!=0) return; Ode.dContactGeom[] contactgeoms = new Ode.dContactGeom[4]; int n; unsafe { Console.WriteLine("###DEBUG### Ode.dContactGeom struct size is: "+sizeof(Ode.dContactGeom)); n = Ode.dCollide(o1,o2,4,contactgeoms,sizeof(Ode.dContactGeom)); Console.WriteLine(n.ToString()); Ode.dContact[] contact = new Ode.dContact[n]; for(int i = 0; i < contact.Length; i++) { contact[i] = new Ode.dContact(); contact[i].surface.mode = (int)Ode.dContactFlags.dContactBounce | (int)Ode.dContactFlags.dContactSoftCFM; contact[i].surface.mu = Ode.dInfinity; contact[i].surface.mu2 = 0; contact[i].surface.bounce = 0.1f; contact[i].surface.bounce_vel = 0.1f; contact[i].surface.soft_cfm = 0.01f; contact[i].geom = contactgeoms[i]; IntPtr c = Ode.dJointCreateContact(world,contactgroup,ref contact[i]); Ode.dJointAttach(c,contact[i].geom.g1,contact[i].geom.g2); } } } вылетает аккурат при вызове Ode.dCollide(o1,o2,4,contactgeoms,sizeof(Ode.dContactGeom)); матерится на assert size>=(int)sizeof(dContactGeom) так вот или я чего-то не понимаю, или разработчики что-то упустили, но в моно sizeof(dContactGeom) возвращает 36, а assert требует чтоб size == 52! Но даже если передать это число, вылетает сегфолт, потому что структура в моно не может уместить возвращаемые данные из нативной либы. Вот такие пироги. Может кто знает, как лечить, не переписывая врапер или сам движок?
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Неведомая хня (2016)
- Форум [physics engine] Bullet vs Newton vs ODE (2008)