Tôi đang thử triển khai vòng xoay bi xoay/bi xoay nhưng tôi gặp sự cố với vòng xoay trung tâm . Tôi muốn trung tâm trở thành trung tâm của màn hình của tôi cho dù thế nào đi chăng nữa.Làm thế nào để xoay về trung tâm của màn hình bằng cách sử dụng quaternions trong opengl?
Hãy để tôi giải thích những gì tôi đã làm cho đến thời điểm này.
Tôi đã tạo một quaterion (trục quay: vector_start x vector_end, góc: vector_start * vector_end)
Từ đó quaternion tôi đã tạo ra một ma trận xoay để sử dụng nó với glMultMatrixf (ma trận) và có được vòng quay mong muốn.
Vấn đề là trong khi mô hình của tôi dường như xoay vòng cung vì nó luôn xoay quanh nguồn gốc địa phương của nó. Làm thế nào tôi có thể làm cho nó xoay quanh tâm của màn hình của tôi bất kể nguồn gốc địa phương của nó nằm ở đâu?
Tôi giả sử một giải pháp cho vấn đề đó có thể là dịch toàn bộ trục quay ở giữa màn hình và sau đó áp dụng vòng xoay nhưng điều này có thể? Tôi có bỏ sót điều gì ở đây không?
Có nhưng khi tôi áp dụng glMultMatrixf() không opengl quay mô hình xung quanh nguồn gốc địa phương của nó? Vì vậy, nếu tôi dịch sang nguồn gốc xoay (không phải bằng cách sử dụng glRotatef() nhưng glMultMatrix()) và sau đó dịch ngược lại mô hình của tôi sẽ được quay lại xung quanh nguồn gốc của nó và không phải là nguồn gốc của nó là trung tâm của màn hình chẳng hạn. –
Dịch với glTranslatef(), sau đó nhân với ma trận xoay của bạn glMultMatrix(), và dịch ngược lại bằng glTranslatef(). Điều này trái ngược với việc chỉ gọi glMultMatrix(). Điều đó không hiệu quả? – catchmeifyoutry
Không, nó không hoạt động. Những gì nó làm là nó quay mô hình như đã nói từ ma trận xoay được áp dụng bởi glMultMatrixf nhưng xung quanh nguồn gốc địa phương của nó. Tôi đã cố gắng để chuyển đổi quaternion xoay để góc Euler và sau đó áp dụng glRotatef (Yaw, 0., 0., 1.); glRotatef (Pich, 0., 1., 0.); glRotatef (Cuộn, 1., 0., 0.); thay vì áp dụng trực tiếp glMultMatrixf() nhưng sau đó trong khi xoay vòng là về trung tâm của màn hình, nó không liên quan gì đến vòng xoay vòng cung ! –