Я не знаю, является ли это наиболее эффективным методом, но я бы просто вычислил новые позиции вершин и на основании этих данных выяснил AABB.Например,
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);
Если вы не знаете, как умножить матрицу на вектор, попробуйте поискать ее в Google.
Также обратите внимание, что, поскольку размеры матрицы равны 4x4, векторы длявершины также должны быть 4-мерными.Вы можете преобразовать 2D вектор в 4D вектор, добавив третий компонент 0 (ноль) и четвертый компонент 1 (один).После умножения вы можете преобразовать полученный вектор 4D обратно в 2D, разделив компоненты x и y на четвертый компонент и просто проигнорировав третий компонент, потому что вам не нужно третье измерение.
Поскольку умножение матриц может быть довольно трудоемкой операцией, этот подход может быть полезен только в том случае, если вам не нужно часто обновлять множество AABB.