2011-09-02 40 views
2

我正在使用Open Dynamics Engine在C++中编写游戏。当我运行它,我得到这些错误:惯性必须是肯定的

ODE Message 2: inertia must be positive definite in dMassCheck() File ../../../../../ode/src/mass.cpp Line 53 

ODE Message 2: inertia must be positive definite in dMassCheck() File ../../../../../ode/src/mass.cpp Line 53 

ODE INTERNAL ERROR 1: assertion "dMassCheck(mass)" failed in dBodySetMass() [../../../../../ode/src/ode.cpp]

我有这样的代码:

void Physics::addObject(dBodyID *body, dMass *massPtr, dReal mass) { 
    *body = dBodyCreate(world); 
    dMassSetSphereTotal(massPtr, 2.0f, 1.0f); 
    dBodySetMass(*body, massPtr); 
    dBodySetPosition(*body, 0.0, 0.0, 0.0); 
} 

我被physics->addObject(&orb.body, &orb.mass, 1.0);调用它。

回答

0

massPtr结构包含惯性张量。这个张量(在这种情况下只是一个矩阵)必须是肯定的。这就是我们所能说的,直到你告诉我们你从哪里得到你的massPtr

+0

我更新了第一篇文章。 – m4tx

+0

是的,但是...是的,但是......它是什么? – TonyK

+0

Ahhh ...大声笑,没什么,我只是在Orb类中创建了一个变量:'class Orb {public:[......] dMass mass; }'然后我在创建Orb和Physics对象后调用addObject()。 – m4tx