Russian Qt Forum

Qt => OpenGL => Тема начата: Sahsa от Октябрь 31, 2015, 20:16



Название: Прокрутка и область рисования
Отправлено: Sahsa от Октябрь 31, 2015, 20:16
1) как в opengl ограничить область рисования?
2) как сделать скрул бар для opengl. Отрысовка происходит в отдельном классе и создается GLWindow и все это запихиваается в QDockWidget.


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


Название: Re: Прокрутка и область рисования
Отправлено: Sahsa от Ноябрь 02, 2015, 10:20
А можно более подробно про скроллинг?)


Название: Re: Прокрутка и область рисования
Отправлено: __Heaven__ от Ноябрь 02, 2015, 14:34
Поясните, что за скролл вам нужен. Я вижу 2 варианта:
1) QGLWidget не влезает в QDockWidget и вам необходимо скролить именно виджет
2) Вам нужно скролить изображение, которое рисует QGLWidget


Название: Re: Прокрутка и область рисования
Отправлено: Sahsa от Ноябрь 04, 2015, 09:57
в QDockWidget добавляем GLWindows и в окне QDockWidget нужны полосы прокрутки, для быстрого перемещения


Название: Re: Прокрутка и область рисования
Отправлено: Igors от Ноябрь 05, 2015, 07:41
Собственно скроллинг делается добавлением смещения в матрицу OpenGL (обычно MODEL_VIEW_MATRIX) которая заполняется при каждом рисовании. Скроллбары - вот не знаю можно ли их добавить прямо в GLWindow. Во всяком случае QScrollArea в доке и GLWindow как виджет QScrollArea работать будет.

Вообще здесь проще показать на тестовом примере чем словами. Выкладывайте (в zip), но учтите - версия Qt пятерка (QOpenGLWindow) 


Название: Re: Прокрутка и область рисования
Отправлено: Sahsa от Ноябрь 09, 2015, 09:59
создается клас

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

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

и у меня не получается добавить скролинг при помощи ползунков


Название: Re: Прокрутка и область рисования
Отправлено: __Heaven__ от Ноябрь 10, 2015, 07:44
Вообще, скорее всего, всё зависит от реализации вашего метода paintGL. Вам необходимо определиться, как значения скролбара будут переводиться в координаты OpenGL.
Если вы реализовывали свой класс таким образом, что в initializeGL() не происходит операций с матрицами, в resizeGL() происходит модифицирование только матрицы проекции, а в paintGL() идёт работа с матрицей моделирования + рисование, тогда:
Берём, после приведения матрицы модели к единичной вставляем смещение её на то расстояние, которое вам необходимо.
Для этого необходимо вызвать метод glTranslate, либо, если вы работаете с классом матриц QMatrix4x4::translate


Название: Re: Прокрутка и область рисования
Отправлено: Sahsa от Ноябрь 10, 2015, 09:10
а можно хоть какой нить пример, так как с openGL пока не очень дружу


Название: Re: Прокрутка и область рисования
Отправлено: __Heaven__ от Ноябрь 10, 2015, 09:15
Думаю, тут (http://www.prog.org.ru/topic_27475_0.html) вы для себя что-нибудь найдёте


Название: Re: Прокрутка и область рисования
Отправлено: __Heaven__ от Ноябрь 10, 2015, 09:18
Перемещение конкретно здесь (http://www.prog.org.ru/index.php?topic=27475.msg199394#msg199394)


Название: Re: Прокрутка и область рисования
Отправлено: __Heaven__ от Ноябрь 10, 2015, 09:30
Перемещение конкретно здесь (http://www.prog.org.ru/index.php?topic=27475.msg199394#msg199394)
Правда, тут используется 2D и не используются матрицы. Может вам и не подойдет.
Вообще, с вашей стороны нужно больше кода. дайте реализацию этих 3х методов.


Название: Re: Прокрутка и область рисования
Отправлено: __Heaven__ от Ноябрь 10, 2015, 09:36
Я учился по книге: http://www.ozon.ru/context/detail/id/2639015/ (http://www.ozon.ru/context/detail/id/2639015/)
Первые 4 главы дадут понимание вашей задачи.


Название: Re: Прокрутка и область рисования
Отправлено: Sahsa от Ноябрь 10, 2015, 09:45
спасибо, буду смотреть, возникнут вопросы напишу.