你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

对象边界

对象边界表示实体及其子对象占用的空间量。 在 Azure 远程渲染中,始终将对象边界指定为轴对齐边界框 (AABB)。 对象边界可以位于局部空间或世界空间中。 无论采用哪种方式,它们始终是轴对齐的,这意味着在局部空间和世界空间表示形式之间,盘区和卷可能有所不同。

查询对象边界

可以直接从网格资源中查询网格的局部轴对齐边界框。 可以使用实体的转换将这些边界转换为实体的局部空间或世界空间。 有关更多信息,请参阅网格

可通过此方式计算整个对象层次结构的边界。 此方法需要遍历层次结构,查询每个网格的边界,并手动合并它们。 此操作既繁琐又低效。

更好的方法是在实体上调用 QueryLocalBoundsAsyncQueryWorldBoundsAsync。 此方法将计算卸载到服务器,并在最少延迟的情况下返回。

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 文档

后续步骤