Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: эффект мерцающих звёзд
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Система рисования. Печать
efg
есть статичное изображение. нужно изменить заданную область - в моём случае небо - так, чтобы казалось, что это анимация (смазать, размыть, может быть, так, что коэффициенты рассчитываются случайно) и нарисовать (несколько раз в секунду, конечно). в какую сторону копать? нужно учить opengl? или можно обойтись средствами qpainter? есть ли готовые примеры, или хотя бы что-то похожее?
Litkevich Yuriy
Цитата(efg @ 4.6.2011, 23:36) *
нужно изменить заданную область - в моём случае небо
что она из себя представляет, как ты её делаешь?
efg
Цитата(Litkevich Yuriy @ 4.6.2011, 21:54) *
Цитата(efg @ 4.6.2011, 23:36) *
нужно изменить заданную область - в моём случае небо
что она из себя представляет, как ты её делаешь?

массив точек, изображающих геометрическую фигуру из изломанных линий...


и к этой области нужно применить эффекты
Алексей1153
efg, какие будут использованы примитивы (точки, линии, многоугольники) - неважно , главное, это вывод анимации. У каждого примитива должна быть либо функция яркости/цвета от времени. Возможно , даже лучше оставить такую фишку, как задание функциии объекта B в виде функяии объекта A + сдвиг по фазе. Время тактируй при помощи таймера (для человечьего глаза достаточно 50...250 мс). И всё, вперёд - на мины )
efg
Цитата(Алексей1153 @ 5.6.2011, 13:25) *
efg, какие будут использованы примитивы (точки, линии, многоугольники) - неважно , главное, это вывод анимации

естественно
Цитата(Алексей1153 @ 5.6.2011, 13:25) *
У каждого примитива должна быть либо функция яркости/цвета от времени

либо что? и к чему это вообще?
Цитата(Алексей1153 @ 5.6.2011, 13:25) *
Возможно , даже лучше оставить такую фишку, как задание функциии объекта B в виде функяии объекта A + сдвиг по фазе

я ничего не понял же!
Цитата(Алексей1153 @ 5.6.2011, 13:25) *
Время тактируй при помощи таймера (для человечьего глаза достаточно 50...250 мс). И всё, вперёд - на мины )

уж не стал бы я делать цикл while... sleep

ответьте по существу - вопросы в первом посте
Litkevich Yuriy
на языке крутится blur (по-моему пример такой был, толи штатный в 4.7, толи в блоге у тролей)
Алексей1153
>>ответьте по существу - вопросы в первом посте

я ответил на САБЖ
>>эффект мерцающих звёзд

и никто не виноват, что ты не умеешь вопрос задавать. А какой вопрос - такой и ответ :)

Но всё равно всё выйдет так, как я описал - будет функция от времени некоего параметра.

>>уж не стал бы я делать цикл while... sleep
цикл тут ни при чём, я про таймер говорил
Litkevich Yuriy
Цитата(Алексей1153 @ 5.6.2011, 20:23) *
будет функция от времени некоего параметра
и что она будет делать?
Алексей1153
странный вопрос. Будет выдавать новое значение изменяемого параметра

Нет, если тема про блюр - то пожалуйста, пусть это будут встроенные эффекты. Но из первого поста это неочевидно
ufna
а можно как-то конкретизировать задачу или привести пример?
Алексей1153
>>или привести пример
и желательно на видео ))
efg
Цитата(Алексей1153 @ 5.6.2011, 18:23) *
>>ответьте по существу - вопросы в первом посте

я ответил на САБЖ
>>эффект мерцающих звёзд

и никто не виноват, что ты не умеешь вопрос задавать. А какой вопрос - такой и ответ :)

Цитата(efg @ 4.6.2011, 21:36) *
в какую сторону копать? нужно учить opengl? или можно обойтись средствами qpainter? есть ли готовые примеры, или хотя бы что-то похожее?

в вашем посте не было ни слова ни про opengl, ни про иные средства, с помощью можно достичь желаемого эффекта. поправьте меня, если это не так.

Цитата(Алексей1153 @ 5.6.2011, 18:23) *
>>уж не стал бы я делать цикл while... sleep
цикл тут ни при чём, я про таймер говорил

а я имел в виду, что использование таймера очевидно

Цитата(ufna @ 5.6.2011, 18:40) *
а можно как-то конкретизировать задачу или привести пример?

пусть дано изображение

и задана область

применяем к области искажение\размытие (не обязательно блюр - скорее, даже, блюр как раз и не подойдёт - лучше что-нибудь вроде "волн") и получаем


для любителей интерактива примитивная гифка:
ufna
задача делится на три части:

1. выделение области
2. подготовка нескольких изображений
3. смена их по событию таймера

1 думаю решена

2 и 3 взаимосвязаны. применять эффекты к области - дело муторное. проще - берешь баундинг бокс этой области, и применяешь эффект к нему. область работает как маска. после чего, по событию таймера, рисуешь по маске нужное изображение.

все средствами QPainter реализуется.

эффект блюра - алгоритм простой, на QPainter без проблем делается.
Litkevich Yuriy
Цитата(Алексей1153 @ 5.6.2011, 20:33) *
Но из первого поста это неочевидно
Цитата(efg @ 4.6.2011, 23:36) *
это анимация (смазать, размыть,
по-моему всё очевидно
efg
нашёл, вот:
http://doc.qt.nokia.com/qq/32/qq32-next-gen-uis.html
http://doc.qt.nokia.com/4.7/qgraphicsblureffect.html

Quiet.h:
#ifndef QUIET_H
#define QUIET_H

#include <QtGui>

class quiet : public QWidget {
    Q_OBJECT

public:
    quiet(QWidget *parent = 0);
    ~quiet();
    void paintEvent(QPaintEvent *event);
private:
    QImage image;
    QPixmap pixmap;
    QGraphicsBlurEffect effect;
    QGraphicsPixmapItem pixmapItem;
    QTimer *timer;
private slots:
    void reDraw();
};

#endif // QUIET_H


Quiet.cpp:
#include "quiet.h"

quiet::quiet(QWidget *parent) : QWidget(parent) {
    setWindowTitle("Quiet");
    resize(640, 480);
    setMaximumSize(640, 480);
    setMinimumSize(640, 480);
    image.load(":/images/pic.png", "png");
    timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), this, SLOT(reDraw()));
    timer->start(100);
    repaint();
}

quiet::~quiet() {
}

void quiet::paintEvent(QPaintEvent *event) {
    QPainter painter(this);
    QPoint point;
    point.setX(0);
    point.setY(0);
    //painter.drawImage(point, image);
    painter.drawPixmap(point, pixmap);
}

void quiet::reDraw() {
    pixmap.fromImage(image, Qt::AutoColor);
    pixmapItem.setPixmap(pixmap);
    effect.setBlurRadius(0.1); // случайные значения сюда
    pixmapItem.setGraphicsEffect(&effect);
    repaint();
}


не только ничего не рисуется, так ещё и при закрытии окна вылезает appcrash
что я делаю не так?
efg
работает, только если применить эффект ко всему виджету... boundingRectFor(rect) не учитывается почему-то
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.