I'm facing a problem trying to calculate the AABB on my models after rotation is applied. The rotation is not applied on the vertex positions directly, but in a seperate rotation matrix - just multiplied with the projection matrix and set as uniform. Currently I'm calculating the min/max of the vertexes on all three axes (x, y, z) to calculate the AABB. This works well, as long as the model is unrotated.
AABB calculateAabb() { glm::vec3 center, extend; glm::vec3 min, max; for (size_t i = 0; i < getVertexCount(); ++i) { if (positions[i * 3] < min.x){ min.x = positions[i * 3]; } if (positions[i * 3 + 1] < min.y) { min.y = positions[i * 3 + 1]; } if (positions[i * 3 + 2] < min.z) { min.z = positions[i * 3 + 2]; } if (positions[i * 3] > max.x) { max.x = positions[i * 3]; } if (positions[i * 3 + 1] > max.y) { max.y = positions[i * 3 + 1]; } if (positions[i * 3 + 2] > max.z) { max.z = positions[i * 3 + 2]; } } extend = (max - min) * 0.5f; center = min + extend; return AABB(center, extend); } The std::vector positions[] contains all vertexes in the order x, y, z - getVertexCount() returns positions.size()/3. My rotation matrix is described by a single angle on the y axis glm::eulerAngleY(glm::radians(angle));.
My question is: is there any way to calculate the AABB for the rotated model without applying the rotation matrix to all the vertexes individually? How can I get min/max values on the axes from a rotated coordinate system?