Tôi không biết nếu điều này là phương pháp hiệu quả nhất, nhưng tôi sẽ chỉ tính toán các vị trí mới của các đỉnh và dựa trên dữ liệu đó tìm ra AABB. Ví dụ:
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);
Nếu bạn không biết cách nhân một ma trận bằng véc tơ, hãy thử googling nó.
Cũng lưu ý rằng vì kích thước ma trận là 4x4, vectơ cho các đỉnh cũng cần phải là 4 chiều. Bạn có thể chuyển đổi vector 2D thành vector 4D bằng cách thêm thành phần thứ ba 0 (không) và thành phần thứ tư 1 (một). Sau khi phép nhân đã được thực hiện, bạn có thể chuyển đổi vector 4D thu được thành 2D bằng cách chia các thành phần x và y cho thành phần thứ tư và đơn giản bằng cách bỏ qua thành phần thứ ba vì bạn không cần thứ nguyên thứ ba.
Kể từ khi nhân ma trận có thể là một hoạt động xử lý khá nặng, phương pháp này có thể chỉ tốt, nếu bạn không cần cập nhật nhiều AABB thường xuyên.
Đối với những người không quen thuộc, có lẽ bạn có thể đề cập đến AABB = "hộp giới hạn theo trục"? –