No sé si este es el método más eficiente, pero me acaba de calcular las nuevas posiciones de los vértices y en base a los datos que averiguar la AABB. Por ejemplo,
Vertex v0, v1, v2, v3;
// in the local coordinates of the rectangle
// so for example v0 is always 0,0 and width and height define the others
// put some values to v0..v3
glLoadIdentity();
glTranslatef(the position of the rectangle);
glTranslatef(center_point);
glRotatef(angle, 0,0,1);
glTranslatef(-center_point);
GLfloat matrix[16];
glGetFloatv(GL_MODELVIEW_MATRIX, matrix);
v0 = multiply_matrix_by_vector(matrix, v0);
v1 = multiply_matrix_by_vector(matrix, v1);
v2 = multiply_matrix_by_vector(matrix, v2);
v3 = multiply_matrix_by_vector(matrix, v3);
AABB = find_the_minimums_and_maximums(v0, v1, v2, v3);
Si no sabe cómo multiplicar una matriz por vector, intente buscar en Google.
También tenga en cuenta que dado que las dimensiones de la matriz son 4x4, los vectores para los vértices también deben ser de 4 dimensiones. Puede convertir un vector 2D en un vector 4D agregando un tercer componente 0 (cero) y un cuarto componente 1 (uno). Después de que se haya realizado la multiplicación, puede convertir el vector 4D resultante en 2D dividiendo los componentes x e y por el cuarto componente y simplemente ignorando el tercer componente porque no necesita una tercera dimensión.
Dado que las multiplicaciones de matrices pueden ser una operación bastante pesada para el procesador, este enfoque podría ser bueno solamente, si no es necesario actualizar muchas AABB muy a menudo.
Para aquellos que no están familiarizados, ¿tal vez podría mencionar que AABB = "cuadro delimitador alineado por el eje"? –