Udostępnij za pośrednictwem


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;
                // ...
            }
        }
    );
}

Dokumentacja interfejsu API

Następne kroki