2017-07-10 101 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但我認爲他們*是*逆時針,現在順時針... –