Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: Snake174 от Январь 23, 2014, 08:16



Название: Кубическая панорама
Отправлено: Snake174 от Январь 23, 2014, 08:16
Всем привет.
Имеется кубическая панорама (развёртка куба), построенная из 6 изображений.
Как можно из этой развёртки получить обратно 6 изображений (стороны куба)?


Название: Re: Кубическая панорама
Отправлено: Igors от Январь 23, 2014, 09:18
Есть такой формат изображения "vertical (horizontal) cross", выглядит как крест, пропорции 3:4
Утилиты переводят его в сферическую карту и обратно, а вот про 6 отдельных - не помню. В принципе
QImage::copy - делов на неск минут


Название: Re: Кубическая панорама
Отправлено: Snake174 от Январь 23, 2014, 13:36
Спасибо что откликнулись.
QImage::copy() - это не то. При построении панорамы изображение искажается и простым копированием получатся не исходные изображения, а немного другие.
Утилита - это конечно хорошо, но мне бы как-нибудь программно нужно сделать. Сколоко ни гуглил, так и не нашёл никаких формул, только программы.
Front
(http://i60.fastpic.ru/thumb/2014/0123/51/573d14d27da529dbf96fa307757a6251.jpeg) (http://fastpic.ru/view/60/2014/0123/573d14d27da529dbf96fa307757a6251.jpeg.html)
Right
(http://i60.fastpic.ru/thumb/2014/0123/4f/ba6ddb6b73b63e232e9711ecb172654f.jpeg) (http://fastpic.ru/view/60/2014/0123/ba6ddb6b73b63e232e9711ecb172654f.jpeg.html)
Back
(http://i60.fastpic.ru/thumb/2014/0123/f0/866a35484d13f064043e74c4349e92f0.jpeg) (http://fastpic.ru/view/60/2014/0123/866a35484d13f064043e74c4349e92f0.jpeg.html)
Left
(http://i60.fastpic.ru/thumb/2014/0123/04/6879737bf62b30075d98440806269f04.jpeg) (http://fastpic.ru/view/60/2014/0123/6879737bf62b30075d98440806269f04.jpeg.html)
Top
(http://i60.fastpic.ru/thumb/2014/0123/bb/823382c55f9c062d564020ace4d723bb.jpeg) (http://fastpic.ru/view/60/2014/0123/823382c55f9c062d564020ace4d723bb.jpeg.html)
Bottom
(http://i60.fastpic.ru/thumb/2014/0123/cb/25737f47dceee7c18e52be8ee489c7cb.jpeg) (http://fastpic.ru/view/60/2014/0123/25737f47dceee7c18e52be8ee489c7cb.jpeg.html)
Панорама
(http://i60.fastpic.ru/thumb/2014/0123/6d/e38def226b77c325bbedee8b8f6c936d.jpeg) (http://fastpic.ru/view/60/2014/0123/e38def226b77c325bbedee8b8f6c936d.jpeg.html)


Название: Re: Кубическая панорама
Отправлено: Igors от Январь 23, 2014, 14:14
Так у Вас сферическая панорама 2:1. Тогда можно утилитой перевести ее в vertical cross и оттуда легко нарезать. Или писать самому, придется немного повозиться. Для каждого пикселя (x, y) сначала находите 2 угла
Код:
theta = (y - middle_y) / size_y) * PI;
phi = (x - middle_x) / size_x * PI * 4;
Потом из полярных в декартовы
Код:
x1 = cos(theta) * sin(phi)
y1 = sin(theta);
z1 = cos(theta) * cos(phi)
Дальше длинный/нудный switch, расписывать не буду, смысл такой: напр z1 по модулю оказалось максимальным - тогда если z1 < 0, то это задняя стенка куба, а если z1 > 0 то передняя. Аналогично если maxX > 0 то правая стенка, иначе левая.

Когда узнали стенку, делите x1, y1, z1 на макс модуль и отбрасываете ненужную координату, напр передняя стенка - остаются только x и y. Переводите их в координаты имеджа.

Ну и конечно все это для приличных картинок (хотя бы 2k x 1k), на тех что Вы показали ничего хорошего не получить


Название: Re: Кубическая панорама
Отправлено: Snake174 от Январь 23, 2014, 14:36
И на этом спасибо.


Название: Re: Кубическая панорама
Отправлено: Igors от Январь 23, 2014, 17:25
И на этом спасибо.
Не наблюдаю энтузиазма  :)
Кстати я рассказал "наоборот" (сам только сейчас понял), Вам нужно начинать со сторон кубика и мапиться в панораму.