Russian Qt Forum

Qt => OpenGL => Тема начата: aaamodder от Апрель 05, 2015, 09:29



Название: Странности в приложении
Отправлено: aaamodder от Апрель 05, 2015, 09:29
Здравствуйте, уважаемые форумчане! Я только начинаю изучать OpenGL, а уже происходят непонятные вещи. Банальнейшее приложение, выводящее белый квадрат на чёрном фоне. Собственно, вот код:
Код:
    glClearColor(0.0, 0.0, 0.0, 0.0);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor3f(1.0, 1.0, 1.0);
    glOrtho(-2.0, 3.0, -1.0, 2.0, -1.0, 1.0);
    glBegin(GL_POLYGON);
    glVertex3f(0.25, 0.25, 0.0);
    glVertex3f(0.75, 0.25, 0.0);
    glVertex3f(0.75, 0.75, 0.0);
    glVertex3f(0.25, 0.75, 0.0);
    glEnd();
    glFlush();

Но: при нажатии на Alt после запуска изображение прямоугольник какого-то чёрта уменьшается!
Кроме этого кода функциональности у приложения нет, даже обработчика QKeyEvent. Почему такое может происходить?
Заранее спасибо.

Если нужно, могу прикрепить скрины.


Название: Re: Странности в приложении
Отправлено: RSATom от Апрель 06, 2015, 09:12
Совет - изучайте сразу шейдеры.


Название: Re: Странности в приложении
Отправлено: Igors от Апрель 06, 2015, 09:39
Но: при нажатии на Alt после запуска изображение прямоугольник какого-то чёрта уменьшается!
Кроме этого кода функциональности у приложения нет, даже обработчика QKeyEvent. Почему такое может происходить?

Если нужно, могу прикрепить скрины.
От скринов мало толку, выкладывайте проект. Вероятно меняется размер выводимой области (glViewport)

Совет - изучайте сразу шейдеры.
Мое мнение обратное - не лезьте в шейдеры если четко не понимаете зачем.


Название: Re: Странности в приложении
Отправлено: __Heaven__ от Апрель 06, 2015, 12:12
ИМХО, проблема в
Код
C++ (Qt)
glOrtho(-2.0, 3.0, -1.0, 2.0, -1.0, 1.0);
Вы матрицу моделвью не приводите к единичной и при перерисовке получаете уменьшение
Совет - изучайте сразу шейдеры.
Мое мнение обратное - не лезьте в шейдеры если четко не понимаете зачем.
Знания и того и другого лишними не будут  ;)


Название: Re: Странности в приложении
Отправлено: Igors от Апрель 06, 2015, 13:50
ИМХО, проблема в
Код
C++ (Qt)
glOrtho(-2.0, 3.0, -1.0, 2.0, -1.0, 1.0);
Вы матрицу моделвью не приводите к единичной и при перерисовке получаете уменьшение
За счет чего, "матрица поехала", что ли? :)

Знания и того и другого лишними не будут  ;)
Шейдеры - одна из самых легких, приятных и (не побоюсь этого слова) творческих вещей в 3D. Только они не имеют ничего общего с зубрежкой классов  :)


Название: Re: Странности в приложении
Отправлено: __Heaven__ от Апрель 06, 2015, 13:59
За счет чего, "матрица поехала", что ли? :)
Ну да, вроде того.
Цитировать
The current matrix (see glMatrixMode) is multiplied by this matrix and the result replaces the current matrix


Название: Re: Странности в приложении
Отправлено: Igors от Апрель 06, 2015, 14:55
Цитировать
The current matrix (see glMatrixMode) is multiplied by this matrix and the result replaces the current matrix
А ведь точно. Ну тогда просто добавить glLoadIdentity() перед вызовом glOrtho


Название: Re: Странности в приложении
Отправлено: __Heaven__ от Апрель 06, 2015, 16:26
Ещё есть момент.
Нужно, различать матрицы проекции и модели. Операция glOrtho, скорее всего относилась к матрице проекции. В коде отрисовки редко приходится её редактировать (по крайней мере, при изучении). Вам необходимо редактировать её в методе resizeGL(), там же переключаться на матрицу модели, чтобы при отрисовке в методе paintGL() управление происходило именно с ней.