Название: Сглаживание фигур из большого количества точек (Antialiasing many points Отправлено: vintik от Июль 21, 2011, 23:30 Доброго времени суток, товарищи!
Помогите, кто чем может!)) Задача: построить замкнутый контур по большому числу точек (примерно 200). Казалось бы, берём QPolygonF, вставляем в него точки, передаём его в QGraphicsPolygonItem и добавляем на сцену. Отлично работает. НО!!! При включённом сглаживании в конструкторе QGraphicsView: setRenderHint(QPainter::Antialiasing,true); И последующих попытках трансформации вида: большой zoom => rotate или scale - программа жутко тормозит. Была мысль включить аппаратное ускорение в конструкторе QGraphicsView setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers),this)) однако, похоже не все видеокарты поддерживают SampleBuffers (http://www.prog.org.ru/topic_18612_0.html) Т.е. это не выход Наверняка есть какой-то финт ушами, чтобы порешать проблему... подскажите направление! Если что, Qt 4.7.3, ось linux (gentoo(видяха Intel GM965/GL960 Integrated Graphics Controller, драйвер Intel) или opensuse(видяха какая-то radeon, драйвер nouveau)) Название: Re: Сглаживание фигур из большого количества точек (Antialiasing many points Отправлено: Sancho_s_rancho от Июль 22, 2011, 08:54 GraphicsView конечно большой тормоз, но чтоб на полигоне из 200 точек...
Волшебных флагов для QGraphicsView не существует. Я бы пошел по пути реализации собственного Itema. Где бы все отрисовывал и сглаживал в пределах моих требований. Название: Re: Сглаживание фигур из большого количества точек (Antialiasing many points Отправлено: Fregloin от Июль 22, 2011, 12:01 либо представить это как QImage ... работать будет быстрее однозначно
Название: Re: Сглаживание фигур из большого количества точек (Antialiasing many points Отправлено: Igors от Июль 22, 2011, 14:01 Задача: построить замкнутый контур по большому числу точек (примерно 200). Отлично если исходные точки уже упорядочены и образуют корректный замкнутый контур. А если точки следуют в произвольном порядке - получается полигон с взаимо-пересечениями который может работать "совсем не отлично"Казалось бы, берём QPolygonF, вставляем в него точки, передаём его в QGraphicsPolygonItem и добавляем на сцену. Отлично работает. Название: Re: Сглаживание фигур из большого количества точек (Antialiasing many points Отправлено: kamre от Июль 22, 2011, 17:01 либо представить это как QImage ... работать будет быстрее однозначно И как делать zoom? Прям картинку увеличивать? Тогда качество будет никакое.Название: Re: Сглаживание фигур из большого количества точек (Antialiasing many points Отправлено: kamre от Июль 22, 2011, 17:17 А вообще мне тоже интересен этот вопрос, т.к. скорость отрисовки с antialiasing без OpenGL не очень впечатляет. А с OpenGL хоть и быстро, но сглаживание не всегда работает и хуже по качеству получается.
Вот пример по быстрому накидал. Без OpenGL сильно тормозит даже на Core2Duo 3GHz с NVIDIA 9800GTX+. Как можно ускорить отрисовку? Название: Re: Сглаживание фигур из большого количества точек (Antialiasing many points Отправлено: kambala от Июль 22, 2011, 19:50 corei5 2.4GHz, GeForce GT 330M / встроенная Intel HD Graphics (не знаю какая из них работает для приложения), Mac OS X 10.6.8 - абсолютно никаких тормозов. критическая загрузка процессора - 25%, оперативки - 16 Мб (с опенгл - 40 Мб). что я делаю не так?
Название: Re: Сглаживание фигур из большого количества точек (Antialiasing many points Отправлено: vintik от Июль 22, 2011, 23:33 Отлично если исходные точки уже упорядочены и образуют корректный замкнутый контур. А если точки следуют в произвольном порядке - получается полигон с взаимо-пересечениями который может работать "совсем не отлично" Не, контур как раз замкнутый и без пересечений.Вот, кстати, kamre набросал пример, там вполне такие неплохие контуры... При включённом сглаживании и зуме тормозит. На работе удалось завести сглаживание под opengl - драйвер к nvidia под винду справился. Работает странно: при большом зуме чёрный контур закрашенного серым полигона пропадает... но сглаживание - да, есть. Работает шустро, но вот с таким фокусом... пока opengl для меня не решение... Волшебных флагов для QGraphicsView не существует. Но вот с чего начать такой item?Я бы пошел по пути реализации собственного Itema. Где бы все отрисовывал и сглаживал в пределах моих требований. Предположим, что контур нужно закрашивать. Тогда в переопределённом методе paint нужно видимо использовать QPainterPath. Допустим нарисовали, залили. Как переопределить boundingRect? Если тупо возвращать весь охватывающий полигон прямоугольник - ничего не меняется... Может нужно как-то по хитрому возвращать область для перерисовки? Или вообще в другом направлении мысль нужно развивать? Название: Re: Сглаживание фигур из большого количества точек (Antialiasing many points Отправлено: vintik от Июль 23, 2011, 00:46 В архиве наитупейший пример, рисуется большой полигон.
Со сглаживанием на большом зуме при перетаскивании и вращении - задумывается (вращение левая кнопка мыши + скролл) Стоит отключить сглаживание - летает А кто-нить вот эту весчь знает как использовать? QPainterPath::toFillPolygons Это может быть решением? Название: Re: Сглаживание фигур из большого количества точек (Antialiasing many points Отправлено: xokc от Июль 24, 2011, 18:41 В Qt под windows у растрового движка вообще проблема со сглаживанием длинных кривых. Смотрите, например, тут http://www.prog.org.ru/topic_11954_0.html.
Название: Re: Сглаживание фигур из большого количества точек (Antialiasing many points Отправлено: vintik от Июль 25, 2011, 22:30 А есть ли способ нарисовать на сцене залитый полигон, но чтобы его замкнутый контур состоял из QGraphicsLineItem, например?
|