Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: sLiva от Июль 27, 2009, 18:08



Название: Трансформация QGraphicsItem
Отправлено: sLiva от Июль 27, 2009, 18:08
Все привет!

Народ помогите решить задачу, пол дня убил, думал ничего сложного не возникнет.

Мне нужно трансформировать прямоугольный QGraphicsItem в трапецию, т.е. по сути "сузить" его верхнее ребро.

Копал в сторону QTransform, QMatrix не помогло :(

Кто откликнется заранее спасибо.


Название: Re: Трансформация QGraphicsItem
Отправлено: lighting от Июль 27, 2009, 22:12
возможно есть варианты и проще, но как минимум можно воспользоваться drawPolygon и пересчитывая координаты добиться нужного искажения.


Название: Re: Трансформация QGraphicsItem
Отправлено: sLiva от Июль 27, 2009, 22:26
возможно есть варианты и проще, но как минимум можно воспользоваться drawPolygon и пересчитывая координаты добиться нужного искажения.

Не совсем понял как пересчитывать координаты, QGraphicsItem, который нужно трансформировать, содержит в себе много чего, при трансформации нужно что бы все его внутренности тоже трансформировались, мне кажется нужно каким-то хитрым способом построить матрицу трансформации, или скомбинировать несколько трансформация, но пока нужного эффекта не добился :(


Название: Re: Трансформация QGraphicsItem
Отправлено: sLiva от Июль 30, 2009, 18:55
Народ, забыл отписаться, на самом деле все это можно сделать, оказалось я копал в правильном направлении, в Qt есть поддержка трансформации в перспективу, добился нужного эффекта следующим кодом:

Код
C++ (Qt)
QTransform transform;
 
transform.translate(rect.width() / 2, 0);
transform.rotate(80, Qt::XAxis);
transform.translate(-rect.width() / 2, 0);

Т.е. просто делаем rotate где задаем последним параметром по какой координате крутить в пространстве.

А в инете наткнулся на пример (http://zrusin.blogspot.com/2006/09/perspective-transformations.html жалко без исходников) там прямоугольную картинку за углы в любом направлении изменяют, хитро высчитывая матрицу трансформации, кстати еслиб кто на в нормальный мануал по этой матрице ткнул было бы совсем офигенно :-)