2017-07-10 68 views
0

我正在使用此代码创建在Box2D的(C++)的三角形形状的多边形:Box2D的(C++)三角形形状失败区域断言

b2FixtureDef fixtureDef; 
b2PolygonShape dynamicPolygon; 
b2Vec2 vertices[3]; 
vertices[0].Set(0, -1); 
vertices[1].Set(-1, 1); 
vertices[2].Set(1, 1); 
dynamicPolygon.Set(vertices, 3); 
fixtureDef.shape = &dynamicPolygon; 

然而,在运行此代码,我得到这个错误:

a.out: ./Box2D/Collision/Shapes/b2PolygonShape.cpp:127: b2Vec2 ComputeCentroid(const b2Vec2*, int32): Assertion `area > 1.19209289550781250000e-7F' failed. 

该区域似乎太小,但是,点应该做出正确的三角形?

任何想法?

回答

0

我需要换顶点1和2的值:

b2FixtureDef fixtureDef; 
b2PolygonShape dynamicPolygon; 
b2Vec2 vertices[3]; 
vertices[0].Set(0, -1); 
vertices[1].Set(1, 1); 
vertices[2].Set(-1, 1); 
dynamicPolygon.Set(vertices, 3); 
fixtureDef.shape = &dynamicPolygon; 

这个选项把顶点逆时针顺序作品...

+1

可能是因为您使用的面积计算公式取决于顶点顺序。如果我们没有看到代码很难说,但考虑到错误信息以及如何解决它,这似乎是原因。 – Jepessen

+1

我认为你最初有他们顺时针,但你必须把它们逆时针。这是box2d期望的方式。从用户手册:“多边形顶点存储与逆时针绕组(CCW)....” –

+0

@PeterR但我认为他们*是*逆时针,现在顺时针... –