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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Странности в приложении  (Прочитано 5106 раз)
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. Почему такое может происходить?
Заранее спасибо.

Если нужно, могу прикрепить скрины.
« Последнее редактирование: Апрель 05, 2015, 09:43 от aaamodder » Записан
RSATom
Гость
« Ответ #1 : Апрель 06, 2015, 09:12 »

Совет - изучайте сразу шейдеры.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Апрель 06, 2015, 09:39 »

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

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

Совет - изучайте сразу шейдеры.
Мое мнение обратное - не лезьте в шейдеры если четко не понимаете зачем.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #3 : Апрель 06, 2015, 12:12 »

ИМХО, проблема в
Код
C++ (Qt)
glOrtho(-2.0, 3.0, -1.0, 2.0, -1.0, 1.0);
Вы матрицу моделвью не приводите к единичной и при перерисовке получаете уменьшение
Совет - изучайте сразу шейдеры.
Мое мнение обратное - не лезьте в шейдеры если четко не понимаете зачем.
Знания и того и другого лишними не будут  Подмигивающий
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Апрель 06, 2015, 13:50 »

ИМХО, проблема в
Код
C++ (Qt)
glOrtho(-2.0, 3.0, -1.0, 2.0, -1.0, 1.0);
Вы матрицу моделвью не приводите к единичной и при перерисовке получаете уменьшение
За счет чего, "матрица поехала", что ли? Улыбающийся

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

Сообщений: 2130



Просмотр профиля
« Ответ #5 : Апрель 06, 2015, 13:59 »

За счет чего, "матрица поехала", что ли? Улыбающийся
Ну да, вроде того.
Цитировать
The current matrix (see glMatrixMode) is multiplied by this matrix and the result replaces the current matrix
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Апрель 06, 2015, 14:55 »

Цитировать
The current matrix (see glMatrixMode) is multiplied by this matrix and the result replaces the current matrix
А ведь точно. Ну тогда просто добавить glLoadIdentity() перед вызовом glOrtho
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #7 : Апрель 06, 2015, 16:26 »

Ещё есть момент.
Нужно, различать матрицы проекции и модели. Операция glOrtho, скорее всего относилась к матрице проекции. В коде отрисовки редко приходится её редактировать (по крайней мере, при изучении). Вам необходимо редактировать её в методе resizeGL(), там же переключаться на матрицу модели, чтобы при отрисовке в методе paintGL() управление происходило именно с ней.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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