У меня есть сфера, представленная в пространстве объектов центральной точкой и радиусом. Сфера преобразуется в мировое пространство с матрицей преобразования, которая может включать в себя масштабы, вращения и переводы. Мне нужно создать ориентированную по оси ограничительную рамку для сферы в мировом пространстве, но я не уверен, как это сделать.Расчет 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));
}
Однако я сомневаюсь, что это будет всегда работать. Разве это не может привести к неравномерному масштабированию?
На каком языке это? (Похоже на Java.) – BoltClock 2010-12-06 17:06:55
Похож на C#, но на самом деле это вопрос агностики языка – bobobobo 2013-07-27 16:05:53