Найти окончательные мировые координаты из модельной матрицы или кватерниона - PullRequest
0 голосов
/ 28 марта 2012

Я отображаю объект в OpenGL, используя матрицу модели для объекта, которую я строю из своего предварительно сохраненного местоположения объекта И кватерниона, примененного к вращению.Мне нужно найти окончательные декартовы координаты в 3D моего объекта ПОСЛЕ примененных поворотов и преобразований (координат, в которых объект появляется на экране).Как я могу получить простые координаты?

Ответы [ 2 ]

2 голосов
/ 12 апреля 2012

Если я правильно понимаю, у вас есть объект; если вы рендерили его без применения какого-либо преобразования, его центр был бы на [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];

Здесь указывается, куда матрица вида модели перемещает источник модели.

1 голос
/ 28 марта 2012

Реализуйте gluProject() и примените все, кроме преобразования области просмотра.

...