Расчет AABB для преобразованной сферы

У меня есть сфера, представленная в пространстве объектов центральной точкой и радиусом. Сфера преобразуется в мировое пространство с помощью матрицы преобразования, которая может включать в себя масштабы, вращения и переводы. Мне нужно построить выровненную по оси ограничивающую рамку для сферы в мировом пространстве, но я не уверен, как это сделать.

Вот мой текущий подход, который работает в некоторых случаях:

public void computeBoundingBox() {
    // center is the middle of the sphere
    // averagePosition is the middle of the AABB
    // getObjToWorldTransform() is a matrix from obj to world space
    getObjToWorldTransform().rightMultiply(center, averagePosition);

    Point3 onSphere = new Point3(center);
    onSphere.scaleAdd(radius, new Vector3(1, 1, 1));
    getObjToWorldTransform().rightMultiply(onSphere);

    // but how do you know that the transformed radius is uniform?
    double transformedRadius = onSphere.distance(averagePosition);

    // maxBound is the upper limit of the AABB
    maxBound.set(averagePosition);
    maxBound.scaleAdd(transformedRadius, new Vector3(1, 1, 1));

    // minBound is the lower limit of the AABB
    minBound.set(averagePosition);
    minBound.scaleAdd(transformedRadius, new Vector3(-1,-1,-1));
}

Однако я скептически отношусь к этому. что это всегда будет работать. Разве это не приведет к сбою из-за неравномерного масштабирования?

11
задан Nick Heiner 6 December 2010 в 17:04
поделиться