Ich portiere derzeit eine kleine Spiel-Engine auf Linux Ubuntu 14.04.4. Alles funktioniert gut, aber ich habe ein Problem mit Box2D festgestellt. Ich verwende Poly2Tri, um meine Formen zu triangulieren. Diese Bibliothek gibt Dreiecke entgegen dem Uhrzeigersinn zurück, die ich dann mit Box2D fixtures erzeuge.Box2D: Dreieck verursacht "Polygon ist degeneriert"
Einige Dreiecke arbeiten, aber zumindest eine nicht der Fall, das man zum Beispiel:
P1: (-0.135156, -0.042188)
P2: (-0.136719, -0.050000)
P3: (-0.131250, -0.053125)
Wie Sie sehen können, dieses Dreieck ist gegen den Uhrzeigersinn. Wenn Box2D versucht, eine Form mit diesen Eckpunkten erstellen polygonShape->Set()
verwenden, erhalte ich ein Polygon entartet assert ist:
/build/buildd/box2d-2.3.0+ds/Box2D/Box2D/Collision/Shapes/b2PolygonShape.cpp:158: void b2PolygonShape::Set(const b2Vec2*, int32): Assertion `false' failed.
Ich habe mich gefragt, warum ich diese bekommen? Nach einigen Nachforschungen habe ich festgestellt, dass Polygone gegen den Uhrzeigersinn und nicht zu klein sein müssen (Koordinaten müssen größer als 0,00001 oder etwas sein), aber mein Dreieck respektiert beide Einschränkungen. Auch, es funktionierte gut unter Windows!
Es ist auch interessant zu bemerken, dass es scheint, dass diese Behauptung geworfen werden kann, wenn Box2Ds konvexer Hüllenalgorithmus auf dem Polygon bricht (oder so habe ich gehört).
Box2D Versionen:
- auf Ubuntu: 2.3.0 + ds-2
- Unter Windows: 2.3.0
Wenn Sie den Quellcode von box2d haben, werfen Sie einen Blick auf Collision/Shapes/b2PolygonShape.cpp und sehen Sie, ob Sie herausfinden können, wonach es eigentlich sucht. – immibis