Limiti degli oggetti
I limiti degli oggetti rappresentano il volume occupato da un'entità e dai relativi elementi figlio. In Rendering remoto di Azure i limiti degli oggetti sono sempre assegnati come rettangoli delimitatori allineati all'asse (AABB, Axis Aligned Bounding Box). I limiti degli oggetti possono trovarsi nello spazio locale o nello spazio globale. In entrambi i casi, sono sempre allineati all'asse, il che significa che gli extent e il volume possono differire tra la rappresentazione dello spazio locale e globale.
Esecuzione di query sui limiti degli oggetti
Il rettangolo di delimitazione allineato all'asse locale di una mesh può essere sottoposto a query direttamente dalla risorsa mesh. Questi limiti possono essere trasformati nello spazio locale o nello spazio globale di un'entità usando la trasformazione dell'entità. Per altre informazioni, vedere Mesh.
È possibile calcolare i limiti di un'intera gerarchia di oggetti in questo modo. Questo approccio richiede l'attraversamento della gerarchia, l'esecuzione di query sui limiti per ogni mesh e la combinazione manuale. È un'operazione noiosa e poco efficiente.
Un metodo più efficiente consiste nel chiamare QueryLocalBoundsAsync
o QueryWorldBoundsAsync
su un'entità. Questo approccio esegue l'offload del calcolo nel server e restituisce con un ritardo minimo.
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;
// ...
}
}
);
}