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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Прокрутка и область рисования  (Прочитано 11026 раз)
Sahsa
Гость
« : Октябрь 31, 2015, 20:16 »

1) как в opengl ограничить область рисования?
2) как сделать скрул бар для opengl. Отрысовка происходит в отдельном классе и создается GLWindow и все это запихиваается в QDockWidget.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #1 : Ноябрь 02, 2015, 10:03 »

1) В opengl область рисования и так ограничена по каждой координате [-1.0..1.0]. Всё, что лежит за пределами этой области не прорисовывается. Вы же управляете преобразованием верши с помощью 3х матриц: проецирования, представления и viewport.
2) QScrollBar либо рисовать прямо в gl. При прокрутке модифицировать матрицу представления.
Записан
Sahsa
Гость
« Ответ #2 : Ноябрь 02, 2015, 10:20 »

А можно более подробно про скроллинг?)
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #3 : Ноябрь 02, 2015, 14:34 »

Поясните, что за скролл вам нужен. Я вижу 2 варианта:
1) QGLWidget не влезает в QDockWidget и вам необходимо скролить именно виджет
2) Вам нужно скролить изображение, которое рисует QGLWidget
Записан
Sahsa
Гость
« Ответ #4 : Ноябрь 04, 2015, 09:57 »

в QDockWidget добавляем GLWindows и в окне QDockWidget нужны полосы прокрутки, для быстрого перемещения
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Ноябрь 05, 2015, 07:41 »

Собственно скроллинг делается добавлением смещения в матрицу OpenGL (обычно MODEL_VIEW_MATRIX) которая заполняется при каждом рисовании. Скроллбары - вот не знаю можно ли их добавить прямо в GLWindow. Во всяком случае QScrollArea в доке и GLWindow как виджет QScrollArea работать будет.

Вообще здесь проще показать на тестовом примере чем словами. Выкладывайте (в zip), но учтите - версия Qt пятерка (QOpenGLWindow) 
Записан
Sahsa
Гость
« Ответ #6 : Ноябрь 09, 2015, 09:59 »

создается клас

class GLWindows : public QGLWidget
в нем переопределяются методы

void initializeGL();
void resizeGL(int nWidth, int nHeight);
void paintGL();

и у меня не получается добавить скролинг при помощи ползунков
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #7 : Ноябрь 10, 2015, 07:44 »

Вообще, скорее всего, всё зависит от реализации вашего метода paintGL. Вам необходимо определиться, как значения скролбара будут переводиться в координаты OpenGL.
Если вы реализовывали свой класс таким образом, что в initializeGL() не происходит операций с матрицами, в resizeGL() происходит модифицирование только матрицы проекции, а в paintGL() идёт работа с матрицей моделирования + рисование, тогда:
Берём, после приведения матрицы модели к единичной вставляем смещение её на то расстояние, которое вам необходимо.
Для этого необходимо вызвать метод glTranslate, либо, если вы работаете с классом матриц QMatrix4x4::translate
Записан
Sahsa
Гость
« Ответ #8 : Ноябрь 10, 2015, 09:10 »

а можно хоть какой нить пример, так как с openGL пока не очень дружу
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #9 : Ноябрь 10, 2015, 09:15 »

Думаю, тут вы для себя что-нибудь найдёте
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #10 : Ноябрь 10, 2015, 09:18 »

Перемещение конкретно здесь
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #11 : Ноябрь 10, 2015, 09:30 »

Перемещение конкретно здесь
Правда, тут используется 2D и не используются матрицы. Может вам и не подойдет.
Вообще, с вашей стороны нужно больше кода. дайте реализацию этих 3х методов.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #12 : Ноябрь 10, 2015, 09:36 »

Я учился по книге: http://www.ozon.ru/context/detail/id/2639015/
Первые 4 главы дадут понимание вашей задачи.
Записан
Sahsa
Гость
« Ответ #13 : Ноябрь 10, 2015, 09:45 »

спасибо, буду смотреть, возникнут вопросы напишу.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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