решил писать проЭкт на с#(чтоб быстро и на венде работало без
геморроя), но, похоже, геморрой вылез в другом месте. Я использую
биндинги 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)