オブジェクトの境界
オブジェクトの境界は、エンティティとその子が占めるボリュームを表します。 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;
// ...
}
}
);
}