Если я правильно понимаю, у вас есть объект; если вы рендерили его без применения какого-либо преобразования, его центр был бы на [0,0,0] .
У вас есть точка, [a, b, c] , в трехмерном пространстве. Вы применяете перевод к матрице вида модели. Теперь, если вы визуализируете объект, его центр будет в [a, b, c] в мировых космических координатах.
У вас есть кватернион, [qw, qx, qy, qz] . Из этого создайте матрицу вращения , M и примените ее к матрице вида модели. Теперь вы хотите узнать новые координаты [a ', b', c '] центра объекта в мировом пространстве.
Если это так, то самый простой способ - просто умножить матрицу самостоятельно:
a' = m11*a + m12*b + m13*c
b' = m21*a + m22*b + m23*c
c' = m31*a + m32*b + m33*c
где
[m11 m12 m13]
M = [m21 m22 m23]
[m31 m32 m33]
Но, возможно, вы на самом деле не строите M . Другим способом было бы использовать кватернион напрямую, хотя это, по сути, предполагает построение матрицы вращения и последующее ее использование.
Нет необходимости использовать gluProject
. Когда вы применяете вращение к матрице вида модели, умножение матрицы выполняется там. Таким образом, вы можете просто получить значения из самой матрицы:
double mv[16];
glGetDoublev(GL_MODELVIEW_MATRIX,mv);
a' = mv[13];
b' = mv[14];
c' = mv[15];
Здесь указывается, куда матрица вида модели перемещает источник модели.