Поделиться через


Границы объектов

Границы объектов представляют том, занятый сущностью и ее дочерними элементами. В удаленной отрисовке Azure границы объектов всегда задаются в виде выровненных по оси ограничивающих прямоугольников (AABB). Границы объектов могут находиться либо в локальном пространстве, либо в мировом пространстве. В любом случае они всегда выровнены по оси, что означает, что экстенты и объемы могут отличаться между локальным и мировым представлением пространства.

Запросы границ объектов

Локальный ограничивающий прямоугольник с выравниванием по оси сетки можно запрашивать непосредственно из ресурса сетки. Эти границы можно преобразовать в локальное или мировое пространство сущности с помощью преобразования сущности. Дополнительные сведения см. в разделе "Сетки".

Таким образом можно вычислить границы всей иерархии объектов. Этот подход требует обхода иерархии, запроса границ для каждой сетки и объединения их вручную. Эта операция утомительна и неэффективна.

Лучше будет вызвать QueryLocalBoundsAsync или QueryWorldBoundsAsync на сущности. Этот подход выгружает вычисления на сервер и возвращается с минимальной задержкой.

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

Следующие шаги