W Box2D byłem ciekawy, czy można uzyskać obwiednię ciała już utworzonego na świecie.
Zasadniczo Ciało jest tworzone, wchodzi w interakcje ze światem i tym podobne. Potrzebowałem obwiedni tego Ciała. Czy to możliwe?
W Box2D obiekty nie są powiązane z ramkami ograniczającymi, tak jak urządzenia. Musisz więc iterować wszystkie urządzenia i wygenerować nowy AABB. Coś takiego:
b2AABB aabb;
aabb.lowerBound = b2Vec2(FLT_MAX,FLT_MAX);
aabb.upperBound = b2Vec2(-FLT_MAX,-FLT_MAX);
b2Fixture* fixture = body->GetFixtureList();
while (fixture != NULL)
{
aabb.Combine(aabb, fixture->GetAABB());
fixture = fixture->GetNext();
}
fixture->GetAABB()
nie istnieje, ale istniejefixture->GetAABB(int32 childIndex)
.samo użycie urządzenia aabb obejmuje również promień kształtu - jeśli chcesz uzyskać prawdziwy aabb bez promienia kształtu, zrób to w następujący sposób:
źródło
shapeAABB.lowerBound = shapeAABB.lowerBound + r;
ishapeAABB.upperBound = shapeAABB.upperBound - r;
uzyskać pożądane zachowanie.Naprawdę, pętla for jest zwykle lepsza do iteracji. Biorąc odpowiedź @noel:
fixture
Rozumiane jako logiczne wyrażenie jest, jak rozumiem, równoważne zfixture != NULL
.źródło
Tego zazwyczaj używam:
Gdzie jest to jakiś węzeł nadrzędny. Dodałem to nawet do samego węzła (np. SomeNode) i to również wydaje się działać, po prostu upewnij się, że twój indeks Z jest wystarczająco wysoki.
źródło