2011-09-25 109 views
1

我创建了一个有5个顶点的多边形,并且所有顶点都由VertexHelper生成。box2d与自定义多边形崩溃

程序为何在ComputeCentroid()在b2PolygonShape.cpp在b2Assert(面积> b2_epsilon)得到SIGABRT?

该程序运行良好,当我使用shape.SetAsBox(0.359375,1.0)代替shape.Set(顶点,计数)

看来,在使用shape.Set()时计算质心的过程中出现错误,但我不知道如何处理这个问题。

下面的代码:

b2BodyDef bodyDef; 
bodyDef.type = b2_dynamicBody; 
bodyDef.awake = NO; 
bodyDef.position.Set(3.125, 3.125); 
bodyDef.angle = -.785398163397; 
spriteBody = world->CreateBody(&bodyDef); 
spriteBody->SetUserData(sprite); 
b2MassData massData = {2.0, b2Vec2(0.021875, 0.203125), 0.0}; 
spriteBody->SetMassData(&massData); 
int32 count = 5; 
b2Vec2 vertices[] = { 
    b2Vec2(-11.5f/PTM_RATIO, -16.0f/PTM_RATIO), 
    b2Vec2(-10.5f/PTM_RATIO, 15.0f/PTM_RATIO), 
    b2Vec2(10.5f/PTM_RATIO, 15.0f/PTM_RATIO), 
    b2Vec2(10.5f/PTM_RATIO, -5.0f/PTM_RATIO), 
    b2Vec2(-5.5f/PTM_RATIO, -16.0f/PTM_RATIO) 
}; 
b2PolygonShape shape; 
shape.Set(vertices, count); 
b2FixtureDef fixtureDef; 
fixtureDef.shape = &shape; 
fixtureDef.density = 1.0f; 
fixtureDef.friction = 0.2f; 
fixtureDef.restitution = 0.7f; 
spriteBody->CreateFixture(&fixtureDef); 

回答

3

它看起来就像你伤口的顶点走错了路。我认为它们应该在box2d中是逆时针的,至少默认情况下是这样。

你断言会失败,因为面积计算将回到负值,远低于b2_epsilon

+1

我把它逆时针和它的工作。非常感谢你。 :) – rwei