Алгоритм для изменения масштаба в мышь (OpenGL)

У меня есть сцена OpenGL с верхней левой системой координат. Когда я glScale это увеличивает масштаб от (0,0) верхнее левое. Я хочу, чтобы это увеличило масштаб от координаты мыши (относительно кадра OGL). Как это сделано?Спасибо

7
задан Ben 24 June 2011 в 07:31
поделиться

2 ответа

Я считаю, что это можно сделать в четыре шага:

  1. Найдите координаты x и y мыши, используя любую функцию вашей оконной системы (например. GLUT или SDL), и используйте gluUnProject для получения координат объекта, которые соответствуют этим координатам окна
  2. Переведите на (x,y,0), чтобы поместить начало координат в эти координаты
  3. Масштабируйте по желаемому вектору (i, j,k)
  4. Переведите на (-x,-y,0), чтобы вернуть начало координат в левый верхний угол
10
ответ дан 6 December 2019 в 19:33
поделиться

Я сделал плавное увеличение с помощью glortho . Скелет моего решения:

glortho(initial viewport x,y & size)
glcalllist(мой список отображения)
render
.
.
цикл для постепенного перехода к финальным координатам/размеру viewrport . Реализуйте ваши требования по времени и FPS
. .
.
glortho(конечный вьюпорт x,y & размер)
glcalllist(мой список отображения)
render

Надеюсь, вы поняли общую идею. Существует несколько других методов достижения этой цели, но я нахожу метод glortho самым простым для понимания.

3
ответ дан 6 December 2019 в 19:33
поделиться