GLdouble wx,wy,wz, wx1,wy1,wz1;
GLint viewport[4];
GLdouble projection[16];
GLdouble modelview[16];
glGetIntegerv(GL_VIEWPORT,viewport); // параметры матриц 1
glGetDoublev(GL_PROJECTION_MATRIX,projection);
glGetDoublev(GL_MODELVIEW_MATRIX,modelview);
gluUnProject(XX,YY,0,
modelview,projection,viewport, &wx,&wy,&wz); // координаты 1
glScaled(1.1, 1.1, 1); // масштабирую (для Down 1/1.1 соответственно)
glGetIntegerv(GL_VIEWPORT,viewport); // параметры матриц 2
glGetDoublev(GL_PROJECTION_MATRIX,projection);
glGetDoublev(GL_MODELVIEW_MATRIX,modelview);
gluUnProject(XX,YY,0,
modelview,projection,viewport, &wx1,&wy1,&wz1); // координаты 2
glTranslated(wx1-wx,wy1-wy,0); // сдвиг на прежние координаты
OpenGL, C++, преобразование координат, зумирование
Подскажите, пожалуйста, кто знает:
Нужно сделать масштабирование изображения таким образом, чтобы увеличение/уменьшение происходило относительно точки, указанной в данный момент курсором. Делаю в событиях FormMouseWheelUp/Down:
Код:
По оси X все работает на УРА, по оси Y эффект обратный. Для проверки снимал GL-координаты в событии MouseMove - оси сдвигаются куда нужно. А зрительно эффект по осям разный:
для Up по X - отдаление от курсора, по Y - почему-то приближение;
для Down по Х - приближение к курсору, по Y - наоборот.
Что не так? Или, может, другие функции нужно использовать?
сдвигается сама ось Y. У меня там перекрестье (0,0) нарисовано, так по Х ноль остается в перекрестье, а по Y смещается!!
всего лишь нужно было учесть, то, что оконная координата Y перевернута:) тема закрыта.