2017-07-10 10 views
0

をアサート:BOX2D(C++)三角形状失敗領域Iは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しかし、私はそれらが*反時計回りであったと思っていましたが、今時計回りになっています... –

関連する問題