Russian Qt Forum
Октябрь 01, 2024, 20:28 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Zoom в OpenGL... как сделать?  (Прочитано 3624 раз)
vulko
Гость
« : Март 18, 2014, 13:42 »

Уже который день бьюсь над задачей зума в 2d OpenGL сцене.

Есть QGraphicsScene на весь экран у которой в drawBackground() примерно следующее:
glViewport (fullscreen)
gluOrtho2D()
...отрисовка...


Нужно сделать зум opengl сцены в соотв. с выделяемой мышкой областью на экране.
Никак не могу пересчитать координаты...

Может кто сталкивался с такой задачей и что-нибудь подскажет?
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #1 : Март 18, 2014, 13:56 »

http://www.blitzbasic.com/Community/posts.php?topic=57006
Записан
vulko
Гость
« Ответ #2 : Март 18, 2014, 14:57 »


Спс, такой подход (когда есть центральная точка и зум с помощью glScalef) помог решить проблему... Но остается правда небольшое но, теперь не совсем понятно как сделать возможность дальнейшего зума... Т.е. выбрал одну область, и решил ещё и в неё некую часть увеличить...

По идее scale посчитать тут не проблема, а что делать с центральной точкой?
Как пересчитать её координаты?

В данный момент центральную точку считаю так (приложение fullscreen):
Код:
            mapScale = (float) CfgManager::Instance()->getScreenHeight() / selectedAreaSize;
            mapCenterPoint[0] = -(float) mapScale * (CfgManager::Instance()->getScreenWidth() / 2 - zoomArea[0] - selectedAreaSize / 2) * 300 / 1080;
            mapCenterPoint[1] = (float) mapScale * (CfgManager::Instance()->getScreenHeight() / 2 - zoomArea[1] - selectedAreaSize / 2) * 300 / 1080;

пока что с мэджик намберами... 300 в данном случае это размер gl сцены, а 1080 высота экрана... Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.05 секунд. Запросов: 23.