Границы объектов
Границы объектов представляют том, занятый сущностью и ее дочерними элементами. В удаленной отрисовке 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;
// ...
}
}
);
}