Пятница, 19 Апреля 2024, 02:10

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Программирование » C/C++ » Динамическое значение альфа-канала. (Qt,OpenGl,Qml.)
Динамическое значение альфа-канала.
Anarchist_42Дата: Вторник, 24 Июня 2014, 18:07 | Сообщение # 1
был не раз
Сейчас нет на сайте
Всем здравствуйте!

Столкнулся с проблемой: "Не могу изменить значение альфа-канала кисти в цикле." Результаты, которых я достиг, всего два: первый-ничего не меняется, второй-альфа-канал становится сразу же максимальным.

Инициализация:
Код

int f=155;
QRgb red=qRgba(255,0,0,f);
QBrush red_brush = QBrush(QColor::fromRgba(qRgba(255,0,0,f)));


Меняю в цикле:
Код

f=f+25;
red=qRgba(255,0,0,f);
red_brush.setColor(red);


Заранее благодарю за помощь!
Snake174Дата: Среда, 25 Июня 2014, 06:41 | Сообщение # 2
участник
Сейчас нет на сайте
А задержка какая-нибудь в цикле есть? Просто он у тебя быстро отрабатывает и
Цитата
альфа-канал становится сразу же максимальным
. Или прибавляй меньшее значение.


Не следует обманывать инспектора
Pipmak Assistant
Love2D Exporter
Love2D-Helpers
Old Consoles Games
Anarchist_42Дата: Среда, 25 Июня 2014, 10:14 | Сообщение # 3
был не раз
Сейчас нет на сайте
Вот весь код подпрограммы, там нету эффекта от шага(всегда получается то же самое), цикл идет максимум ~50-60 раз.

Код

void circle1::paint(QPainter *painter)
{
     painter->save();
     int f=5;
     //параметры окна
     int x=width();
     int y=height();
     int z=width()/214;
     //устанавливаем цвет контура и кисти
     QPen pen = QPen(Qt::NoPen);
     QRgb red=qRgba(255,0,0,f);
     QRgb black=qRgba(0,0,0,f);
     QBrush white_brush = QBrush(Qt::white);
     QBrush black_brush = QBrush(QColor::fromRgba(qRgba(0,0,0,255)));
     QBrush red_brush = QBrush(QColor::fromRgba(qRgba(255,0,0,f)));
     painter->setPen(pen);
     //вычисляем кол-во зон Фринеля
     double m;
     m=1/(_distance_to_the_screen*0.01)+(1/((_distance_to_the_screen2-_distance_to_the_screen)*0.01));
     m=m*_radius*_radius*0.000001;
     m=m/(_wavelength*0.000000001);
     //выделяем целую часть числа, рисуем минимумы и максимумы
     int k=int(m);
     if(k!=0)
     {
         m=(x/2-2*z)/k;
         if(m/k>=0.5)m=int(m)-1;
         for(int i=1;i<=k;i++)
         {
             f=f+5;
             red=qRgba(255,0,0,f);
             black=qRgba(0,0,0,f);
             red_brush.setColor(red);
             black_brush.setColor(black);
             if(i%2==1)
             {
                 painter->setBrush(red_brush);
                 painter->drawEllipse(2+m*(i-1),2+m*(i-1),x-4-m*(i-1)*2,y-4-m*(i-1)*2);
             }
             else
             {
                 painter->setBrush(black_brush);
                 painter->drawEllipse(2+m*(i-1),2+m*(i-1),x-4-m*(i-1)*2,y-4-m*(i-1)*2);
             }
         }
     }
     else
     {
         int i=0;
         painter->setBrush(red_brush);
         painter->drawEllipse(2+m*(i-1),2+m*(i-1),x-4-m*(i-1)*2,y-4-m*(i-1)*2);
     }
     axis(painter);
     painter->restore();
}
Snake174Дата: Среда, 25 Июня 2014, 10:30 | Сообщение # 4
участник
Сейчас нет на сайте
А если кисти попробовать создавать в цикле?

Не следует обманывать инспектора
Pipmak Assistant
Love2D Exporter
Love2D-Helpers
Old Consoles Games
Anarchist_42Дата: Среда, 25 Июня 2014, 11:20 | Сообщение # 5
был не раз
Сейчас нет на сайте
Как не странно, но это сработало, хоть и не самый оптимальный способ, но рабочий! Спасибо вам за помощь!
Форум игроделов » Программирование » C/C++ » Динамическое значение альфа-канала. (Qt,OpenGl,Qml.)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг