オブジェクトの境界

オブジェクトの境界は、エンティティとその子が占めるボリュームを表します。 Azure Remote Rendering では、オブジェクトの境界は常に 軸平行境界ボックス (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 のドキュメント

次のステップ