Granice obiektów
Granice obiektu reprezentują wolumin zajmowany przez jednostkę i jej elementy podrzędne. W usłudze Azure Remote Rendering granice obiektów są zawsze podawane jako pola ograniczenia wyrównane do osi (AABB). Granice obiektów mogą znajdować się w przestrzeni lokalnej lub w przestrzeni światowej. Tak czy inaczej, są one zawsze wyrównane do osi, co oznacza, że zakresy i objętość mogą się różnić między reprezentacją przestrzeni lokalnej i światowej.
Wykonywanie zapytań dotyczących granic obiektu
Na osi lokalnej wyrównane pole ograniczenia siatki można wykonywać zapytania bezpośrednio z zasobu siatki. Te granice można przekształcić w lokalną przestrzeń lub przestrzeń świata jednostki przy użyciu przekształcenia jednostki. Aby uzyskać więcej informacji, zobacz Meshes (Siatki).
W ten sposób można obliczyć granice całej hierarchii obiektów. Takie podejście wymaga przechodzenia przez hierarchię, wykonywania zapytań dotyczących granic dla każdej siatki i łączenia ich ręcznie. Ta operacja jest zarówno żmudna, jak i nieefektywna.
Lepszym sposobem jest wywołanie QueryLocalBoundsAsync
lub QueryWorldBoundsAsync
na jednostkę. Takie podejście odciąża obliczenia do serwera i zwraca je z minimalnym opóźnieniem.
public async void GetBounds(Entity entity)
{
try
{
Task<Bounds> boundsQuery = entity.QueryWorldBoundsAsync();
Bounds result = await boundsQuery;
Double3 aabbMin = result.Min;
Double3 aabbMax = result.Max;
// ...
}
catch (RRException ex)
{
}
}
void GetBounds(ApiHandle<Entity> entity)
{
entity->QueryWorldBoundsAsync(
// completion callback:
[](Status status, Bounds bounds)
{
if (status == Status::OK)
{
Double3 aabbMin = bounds.Min;
Double3 aabbMax = bounds.Max;
// ...
}
}
);
}