Freigeben über


Objektbegrenzungen

Bei Objektbegrenzungen handelt es sich um den Umfang, der von einer Entität und ihren untergeordneten Elementen belegt wird. In Azure Remote Rendering werden Objektbegrenzungen immer als an Achsen ausgerichteter Begrenzungsrahmen (Axis-Aligned Bounding Box, AABB) bereitgestellt. Objektbegrenzungen können sich entweder im lokalen Raum oder im allgemeinen Raum befinden. In beiden Fällen sind sie immer an den Achsen ausgerichtet. Dies bedeutet, dass sich Ausmaß und Umfang für die Darstellung im lokalen und im allgemeinen Raum unterscheiden können.

Abfragen von Objektbegrenzungen

Der ausgerichtete Begrenzungsrahmen der lokalen Achse eines Gittermodells kann direkt von der Gittermodellressource abgefragt werden. Diese Begrenzungen können über die Transformation der Entität in den lokalen oder allgemeinen Raum einer Entität transformiert werden. Weitere Informationen finden Sie unter Gittermodelle.

Es ist möglich, auf diese Weise die Begrenzungen einer gesamten Objekthierarchie zu berechnen. Für diesen Ansatz ist es erforderlich, die Hierarchie zu durchlaufen, die Grenzen für jedes Gitter abzufragen und sie manuell zu kombinieren. Dieser Vorgang ist sowohl aufwendig als auch ineffizient.

Eine bessere Möglichkeit ist das Aufrufen von QueryLocalBoundsAsync oder QueryWorldBoundsAsync für eine Entität. Bei diesem Ansatz wird die Berechnung auf den Server ausgelagert und mit minimaler Verzögerung zurückgegeben.

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-Dokumentation

Nächste Schritte