Russian Qt Forum
Июнь 16, 2024, 04:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: Эффект перелистывания страниц  (Прочитано 19142 раз)
virtual_root
Гость
« : Август 06, 2012, 10:16 »

Добрый день ребята! Пишу простенькую программку "контакты". Вопрос касается внешнего вида. Форма программы представляет собой развернутую книгу. Где на левой стороне книги отображается список контактов, разбитых по группам, а с правой стороны книги отображается информация о выбранном контакте. Нужно сделать такой эффект: При выборе контакта с лева на правой стороне должна перелистываться страница книги, как будто мы открыли выбранный контакт.
Не знаю с чего начать работу над таким эффектом... Хотелось бы обойтись без openGL. Может у кого есть идеи реализации такого эффекта? Ребята подскажите пожалуйста, как такого добиться!
P.S. Нравится эффект как на iPad - контакты. Хочу такое же сделать.
Записан
Bepec
Гость
« Ответ #1 : Август 06, 2012, 10:19 »

Подари мне ipad - я посмотрю как там сделано и тебе сделаю Веселый

PS GraphicsView позволяет делать всё что угодно.
Записан
virtual_root
Гость
« Ответ #2 : Август 06, 2012, 10:20 »

 Веселый спасибо) А по подробней можно ?)
Вот картинка что примерно хочется.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4732



Просмотр профиля WWW
« Ответ #3 : Август 06, 2012, 10:56 »

на хабре писали как сделать такую анимацию: приводились формулы и реализация под iOS
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
DmitryM
Гость
« Ответ #4 : Август 06, 2012, 10:59 »

Если без OpenGL, то у объекта QPainter есть метод setTransform, с помощью которого устанавливается объект QTransform, который отвечает за повороты, масштабирование и др. преобразования.
Здесь самое сложное написать матрицу преобразования, т. к. все это в 2D.
В OpenGL можно было бы использовать стандартную матрицу поворота.
Записан
lighting
Гость
« Ответ #5 : Август 06, 2012, 11:02 »

или QML. Фоном используешь раскрытую книгу, а для страницы задаешь анимацию поворота. Только центр поворота сместить надо - по умолчанию поворачиваться будет вокруг центра изображения.
Записан
Странник
Гость
« Ответ #6 : Август 06, 2012, 12:29 »

Google в помощь - как-то мне попадалась анимация перелистывания страниц книги с использованием QML, но искать, простите, недосуг.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Август 06, 2012, 13:34 »

Анимация что Вы привели - жульничество, изображение не перспективное и не изометрическое Улыбающийся Если это устраивает, то просто масштабируете по оси X, масштаб = cos(rotate_angle), а потом сдвигаете имедж  по столбцам, заполняя краешки прозрачным цветом

Edit: хотя в принципе такой сдвиг тоже описывается матрицей. Попробуем сконструировать. Система координат: центр в левой верхней точке, Y идет вниз, значит с осью Y все ясно (0, 1). X смасштабирован да еще чуть повернут
Код
C++ (Qt)
const qreal max_fool_rot = 20 * M_PI / 180;  // максимальный угол "сдвига" в радианах на угле 90
 
void BuildTransform( qreal angle_degree, QTransform & trans )
{
 qreal angle = angle_degree  * M_PI / 180;
 qreal fool_angle = max_fool_rot * sin(angle);
 qreal scaleX = cos(angle);
 qreal m00 = cos(fool_angle) * scaleX;
 qreal m01 = -sin(fool_angle) * scaleX;
 trans = QTransform(m00, m01, 0, 1, 0, 0);
}
 
Ну и крутить QImage::transformed
« Последнее редактирование: Август 06, 2012, 14:01 от Igors » Записан
virtual_root
Гость
« Ответ #8 : Август 06, 2012, 14:26 »

Спасибо вам ребята! Картинку что я привела, это примерно. Из ваших ответов решила всё таки с openGL повозиться, так как хочу потом и для iPad применить тот же эффект, а насколько мне известно openGL кроссплатформенен. В google нашла похожую статью: habrahabr.ru/post/132053/
Записан
Bepec
Гость
« Ответ #9 : Август 06, 2012, 14:28 »

ы. Вообще то и Qt кроссплатформенен Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #10 : Август 06, 2012, 14:50 »

Спасибо вам ребята! Картинку что я привела, это примерно. Из ваших ответов решила всё таки с openGL повозиться, так как хочу потом и для iPad применить тот же эффект, а насколько мне известно openGL кроссплатформенен. В google нашла похожую статью: habrahabr.ru/post/132053/
Я стараюсь избегать OpenGL насколько возможно, но увы, это не всегда удается. Штука неплохая но очень много надо запоминать. Впрочем если много молодой памяти и силы - то почему нет, кому что нравится.

Вот если надо гнуть страницы (bend), тогда использование OpenGL имеет смысл
Записан
virtual_root
Гость
« Ответ #11 : Август 06, 2012, 15:11 »

Да, странички должны сгибаться. На приведенной картинке немного по другому, проще изображено. Вот у меня тут вопрос всплыл. Если я openGL отрисую книгу и эффект этот сделаю, то потом возможно будет на странице отрисованной книги разместить стандартные компоненты Qt? Наверное многие уже пользовались openGL в Qt и смогут пояснить как это делается?
Я просто рисовала на openGL только в консольном проекте. Создавала форму средствами openGL и на ней рисовала, поэтому наверное чего-то не до понимаю.
« Последнее редактирование: Август 06, 2012, 15:13 от tiny developer » Записан
DmitryM
Гость
« Ответ #12 : Август 06, 2012, 16:00 »

ы. Вообще то и Qt кроссплатформенен Улыбающийся
OpenGL платформонезависимый, а Qt кроссплатформенен только на наборе платформ.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #13 : Август 06, 2012, 16:07 »

Да, странички должны сгибаться. На приведенной картинке немного по другому, проще изображено. Вот у меня тут вопрос всплыл. Если я openGL отрисую книгу и эффект этот сделаю, то потом возможно будет на странице отрисованной книги разместить стандартные компоненты Qt? Наверное многие уже пользовались openGL в Qt и смогут пояснить как это делается?
Я просто рисовала на openGL только в консольном проекте. Создавала форму средствами openGL и на ней рисовала, поэтому наверное чего-то не до понимаю.
Для OpenGL страница книги - просто 3D модель, которая, как обычно, состоит из полигонов - маленьких квадратиков, поэтому страница может гнуться. На модель наложена "текстура", т..е. картинка которая привязана к полигонам и гнется вместе с ними. Таким образом для OpenGL нужна картинка, все "компоненты Qt" ему до лампочки. Ну Вы можете отренедерить в картинку и подсунуть.

OpenGL платформонезависимый, а Qt кроссплатформенен только на наборе платформ.
Если уж умничать то надо сказать OpenGL карто/железо - зависимый что бывает куда больнее  Улыбающийся
Записан
DmitryM
Гость
« Ответ #14 : Август 06, 2012, 17:08 »

Если уж умничать то надо сказать OpenGL карто/железо - зависимый что бывает куда больнее  Улыбающийся
Если в GPU нет поддержки соответствующей версии OpenGL, то расчеты идут через CPU.
Записан
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


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