OpenGl, язык C. Мировые координаты через gluUnProject и их сдвиг от glRotatef
Работаю с перспективной проекцией. Пытаюсь получить мировые координаты в месте клика мышью через функцию gluUnProject()
. Но координаты смещаются из-за использования glRotatef
и glTranslatef
для движения "камеры".
С glTranslatef
все понятно: просто отнять координаты, на которые смещаешь, а что делать с glRotatef
?
Пока я не двигаю изображение при помощи glRotatef
, все работает исправно, но вот с ним проблема.
На данный момент имею такую функцию:
glRotatef(-camera.xAngle, 1,0,0);
glRotatef(-camera.zAngle, 0,0,1);
glTranslatef(-camera_pos.x, -camera_pos.y, -camera_pos.z);
void ClientToOpenGlCoords(int x, int y, double *ox, double *oy, double *oz) {
GLint vp[4];
GLdouble mMatrix[16], pMatrix[16];
float z;
glGetIntegerv(GL_VIEWPORT, vp);
y = vp[3] - y - 1;
glGetDoublev(GL_MODELVIEW_MATRIX, mMatrix);
glGetDoublev(GL_PROJECTION_MATRIX, pMatrix);
glReadPixels(x, y, 1,1, GL_DEPTH_COMPONENT, GL_FLOAT, &z);
gluUnProject(x, y, z, mMatrix, pMatrix, vp, ox, oy, oz);
*ox += camera_pos.x;
*oy += camera_pos.y;
}
Пытался читать про матрицу MODELVIEW, но, видимо, моего понимания не хватает. Подскажите, что мне нужно использовать, чтобы учитывать сдвиг и от glRotatef
.