Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > [qt, opengl] изменение размеров рисунка |
Автор: gordmiand 9.8.2010, 13:48 | ||
Хочу сделать простейшую анимацию – перемещение крестика по OpenGL-сцене... Делаю так:
Вопрос – почему у меня почти каждый новый крестик отличается от предыдущего? то есть одна палка крестика рисуется смещенной относительно другой, а то и визуально короче, хотя они должны рисоваться относительно точки (X,Y,) и одинаковой длины (см. код выше)...Если рисовать крестик побольше (задать коэф. rr = 5), то вроде все нормально перерисовывается, но мне надо рисовать маленький крестик (примерно как при rr = 1) . Подскажите пож-та в чем тут дело и как решить практически такую проблему? в прилагаемом архиве - данная программка... |
Автор: gordmiand 10.8.2010, 13:23 |
нет ну правда - что за глюк такой? может я хочу нарисовать слишком мелкий рисунок или надо задавать размеры в "целых" opengl-пикселах? почему-то же ведь этот же рисунок, но в увеличенном виде перерисовывается без искажений, а при рисовании крестика меленьким - иногда (в некоторых перерисовках) возникают "глюки" в виде смещения палочек креста относительно друг друга... подскажите пож-та в чем тут дело и как сие исправить? |
Автор: gordmiand 12.8.2010, 19:57 |
![]() ![]() |
Автор: Alexeis 12.8.2010, 20:18 | ||
Лучше было тему создать в разделе C/C++: Мультимедия, OpenGL/DirectX . По умолчанию опенгл считает область рисования квадратной, вне зависимости от соотношения сторон. Исправляется это так.
|
Автор: gordmiand 12.8.2010, 20:41 | ||
Alexeis: первые 2 строки из првиеденного Вами вышее ответа у меня и так уже есть - в функции resizeGL (см. выше в моем примере)... а вот куда именно вставить и зачем уменьшать изображение в 100 раз???
если эту строку поставить в resizeGL или paintGL(), то естес-но ничего не увидишь - настолько фигура мелкая и куда-то она смещается из-за масш-ия...ответьте пож-та поподробнее что куда.... |
Автор: gordmiand 15.8.2010, 19:44 | ||
Alexeis: поставил Ваш glScale сразу перед отрисовкой крестика:
это масштабирование ничего не дает - как крестик криво перерисовывался ранее, так он и сейчас так же перерисовывается....или этот cr'qk не сюда надо ставить и что он вообще дает? и вообще - хотелось бы понять в теории почему происходят такие метаморфозы с "пропорциями" (смещение палок крестика друг относительно друга) фигуры при ее перерисовке? |
Автор: Alexeis 15.8.2010, 22:50 |
Конечно ничего не дает если пропорции оставить 1:1 с чего бы что-то поменялось? Неужели окно квадрат, а не прямоугольник? |
Автор: gordmiand 16.8.2010, 09:00 |
вообще мне не принципиальны размеры gl-сцены - я взял например как 100*100, так как при прямоугольных размерах сцены соот-но и картинка будет сплющена по Y или растянута по Х...но почему нельзя оставить квадратные размеры сцены и что тогда будет с остальными моими примитивами на экране? просьба пояснить вообще почему такое у меня происходит при перерисовке примитива(ов)? подскажите пож-та предметно на моем примере (см.выше) что и как мне надо сделать, а то я уже замучился перебирать различные варианты... |
Автор: Alexeis 16.8.2010, 09:27 | ||
Т.е. искажения наблюдаются даже в случае если окно квадратное? ![]() |
Автор: gordmiand 16.8.2010, 19:58 |
Alexeis: в то-то и дело, что именно при размерах сцены 100*100 (оно у меня изначально было, другое мне в принципе и не надо) и получаются какие-то искажения фигуры при ее перерисовке - см. приложенный архив программы в начале данной темы...и я не могу понять почему такое в приципе происходит...но если выводить эту фигуру (крестик), но покрупнее (допустим размером 5*5), то все нормально перерисовывается (а может это просто менее заметно, хотя даже в этом увеличенном варианте гориз-ая палка выглядит-рисуется длиннее вертикальной при их одинаковых размерах и размерах сцены 100*100)...может размеры пикселей надо задавать или что-то еще в этом духе? или в моем коде что-то не так....не понимаю я в чем тут может быть дело в принципе...может как по-другому анимацию легче сделать (в смысле двигать крестик не относительно его центра, а отн-но начала координат и т.п.)? |
Автор: gordmiand 17.8.2010, 21:58 |
![]() ![]() |
Автор: gordmiand 18.8.2010, 22:11 |
допустим квадрат (это один из примтивов, который мне надо анимировать) я могу нарисовать как точку большого размера - такой квадрат нормально перерисовывается, так как он является "единым-неделимым" примитивом, а другие нужные мне (крестик, снежинка, ромб и др..) граф. объекты можно получить только из примитивов - прямых,ломаных,многоугольников и т.п. - вот тут-то и начинаются непонятки... ![]() |
Автор: Alexeis 19.8.2010, 08:58 |
gordmiand, покажите скрин. Кроме того выложите экзешник. Попробуем на других компах, сравним у кого что получиться. |
Автор: gordmiand 19.8.2010, 20:41 | ||||
Alexeis: выкладываю экзешник (непонятно зачем скрин тогда нужен) - смотрите внимательно, а то скажите, что все окей... в экзешнике фигуры выводятся след. образом: в таймере:
|
Автор: Alexeis 19.8.2010, 22:28 | ||
Возможно погрешности округления. Советую попробовать сглаживание glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); Добавлено через 2 минуты и 1 секунду
Думал может аппаратно-зависимая проблема сглаживания линий. |
Автор: gordmiand 20.8.2010, 23:09 |
не знаю какая здесь может быть погрешность округления, но функция glHint(... ничего не дала... |
Автор: kuvshinka 14.9.2010, 21:24 |
gordmiand: столкнулась с той же проблемой, что и описана у Вас в данном топике...решили ли Вы ее и как именно? я установила опытным путем, что все нормально перерисовывается (без искажений фигуры - крестика), только если задавать приращения dx, dy в виде GLint, а не GLfloat....никакие glHint...,как советовал выше Alexeis, не помогают... подскажите в чем тут дело и как это исправить программно? |
Автор: gordmiand 14.9.2010, 21:54 | ||
kuvshinkaЖ я и сам толком не разобрался - задал смещения интами и успокоился...хотя мне тоже интересно было бы задавать смещения фигур вещественными значениями....
в этом методе я не могу задать width и height типа float (или GLfloat) - тогда вообще картинка куда-то бесследно пропадает...и как же тогда задать размеры видового окна (glViewport) в вещественных числах, чтобы затем можно было вещественно задавать смещения фигур? |
Автор: Karabas 27.2.2011, 13:41 | ||
Скрин затем, что не у всех виндовс, а ваш ехе у меня под вайном не запускается, требует дллки для кутэ. |