Objectgrenzen

Objectgrenzen vertegenwoordigen het volume dat een entiteit en de onderliggende elementen bezetten. In Azure Remote Rendering worden objectgrenzen altijd opgegeven als as uitgelijnde begrenzingsvakken (AABB). Objectgrenzen kunnen zich in de lokale ruimte of in de wereldruimte bevinden. In beide gevallen worden ze altijd uitgelijnd, wat betekent dat de omvang en het volume kunnen verschillen tussen de lokale en wereldwijde ruimteweergave.

Objectgrenzen opvragen

De lokale as die begrenzingsvak van een mesh is uitgelijnd, kan rechtstreeks vanuit de mesh-resource worden opgevraagd. Deze grenzen kunnen worden omgezet in de lokale ruimte of wereldruimte van een entiteit met behulp van de transformatie van de entiteit. Zie Meshes voor meer informatie.

Het is mogelijk om de grenzen van een hele objecthiërarchie op deze manier te berekenen. Deze aanpak vereist dat de hiërarchie wordt doorkruist, de grenzen voor elke mesh worden opvraagt en deze handmatig combineert. Deze operatie is zowel tijdrovend als inefficiënt.

Een betere manier is om een entiteit aan te roepen of QueryWorldBoundsAsync op te roepenQueryLocalBoundsAsync. Deze methode offload berekeningen naar de server en retourneert met minimale vertraging.

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

API-documentatie

Volgende stappen