Dela via


Objektgränser

Objektgränsningar representerar volymen som en entitet och dess underordnade objekt upptar. I Azure Remote Rendering anges alltid objektgränsningar som axeljusterade avgränsningsrutor (AABB). Objektgränsen kan vara antingen i lokalt utrymme eller i världsrymden. Hur som helst är de alltid axeljusterade, vilket innebär att omfattningen och volymen kan skilja sig mellan lokal och världsrymdsrepresentation.

Köra frågor mot objektgränsen

Den lokala axeljusterade avgränsningsrutan för ett nät kan frågas direkt från nätresursen. Dessa gränser kan omvandlas till det lokala utrymmet eller världsutrymmet för en entitet med hjälp av entitetens transformering. Mer information finns i Meshes.

Det går att beräkna gränserna för en hel objekthierarki på det här sättet. Den metoden kräver att du går igenom hierarkin, frågar efter gränserna för varje nät och kombinerar dem manuellt. Den här åtgärden är både omständlig och ineffektiv.

Ett bättre sätt är att anropa QueryLocalBoundsAsync eller QueryWorldBoundsAsync på en entitet. Den här metoden avlastar beräkningen till servern och returnerar med minimal fördröjning.

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ästa steg