| Цвет и прозрачность в HGE | 
|  | 
| 
| Renus | Дата: Понедельник, 11 Октября 2010, 02:30 | Сообщение # 1 |  |   почетный гость Сейчас нет на сайте | Посмотрев на родную систему частиц HGE я немножко по плевался, нет все красиво выглядит, но в моей игре есть изменение течения времени и подобные выкрутасы, которые толкнули к написанию своей системы частиц... Написал уже довольно много, все работает и довольно красиво, не могу только с одной вещью разобраться.
 Как изменить цвет и прозрачность спрайта, как обратиться к определенному биту DWORDа отвечающему за цвет, можно ли как то обойти переводы с шестнадцатеричной системой?
 Понимаю что возможно не корректно сформулировал вопрос, но лучше не получаеться)))
 Расскажите кто как работает с цветом спрайтов в HGE плз...
 |  |  |  |  | 
| 
| Akyltist | Дата: Понедельник, 11 Октября 2010, 04:17 | Сообщение # 2 |  |   заслуженный участник Сейчас нет на сайте | Установка прозрачности и цвета 
 Code void SetColor( DWORD col,
 int i = -1
 );
 
col
 The new color value.
 i
 Optional index of the vertex to be changed. Vertices are indexed clockwise starting from top-left one in the range 0-3. If =-1 or omitted, all four vertices will be changed.
  Собственно вызов прям перед рендером партикла (спрайта) По всей видимости при отрисовке спрайта, надо указать флаг: Blending modes
   Code #define    BLEND_COLORADD    1 #define    BLEND_COLORMUL    0
 #define    BLEND_ALPHABLEND  2
 #define    BLEND_ALPHAADD    0
 #define    BLEND_ZWRITE      4
 #define    BLEND_NOZWRITE    0
 
 |  |  |  |  | 
| 
| Renus | Дата: Понедельник, 11 Октября 2010, 09:07 | Сообщение # 3 |  |   почетный гость Сейчас нет на сайте | Да это я читал, я имел ввиду побитовую установку значений(в отдельности) каждой из четырех оставляющих. Еще и работа с шестнадцатеричной системой, не очень быстро получается...
 |  |  |  |  | 
| 
| DekaSoft | Дата: Понедельник, 11 Октября 2010, 09:26 | Сообщение # 4 |  |   почетный гость Сейчас нет на сайте | Quote (Renus) Да это я читал, я имел ввиду побитовую установку значений(в отдельности) каждой из четырех оставляющих. Ну так и редактируй DWORD побитово. 0xAARRGGBB. И скорость работы тут заметно не упадет. Или научить как логическими операциями установить/сбросить бит? Чего-то я плохо понял вопрос кажется... 
 http://dekasoftware.narod.ru
 http://www.dekagames.com
 |  |  |  |  | 
| 
| Renus | Дата: Понедельник, 11 Октября 2010, 09:33 | Сообщение # 5 |  |   почетный гость Сейчас нет на сайте | Quote (DekaSoft) Или научить как логическими операциями установить/сбросить бит? Чего-то я плохо понял вопрос кажется... Ага
   Кинь инфу или ссылку, а то я искал с двордом ниче не нашел...
 |  |  |  |  | 
| 
| DekaSoft | Дата: Понедельник, 11 Октября 2010, 09:51 | Сообщение # 6 |  |   почетный гость Сейчас нет на сайте | Для установки определенного бита в любом числе используется логическое поразрядное "ИЛИ" (or в ассемблере или | в С++) . Для сброса определенного бита - логическое поразрядное "И" (and в ассемблере или & в С++). Вся сложность в том, что в С++ насколько я знаю нельзя задавать непосредственные значения в двоичном виде, поэтому маски придется все равно переводить в хекс. Это снижает читабельность, но не скорость работы.
 Примеры:
   Code  DWORD col;
 
 col = col | 0x20; // установка 6-го бита
 col = col & 0x20; // сброс всех битов кроме 6-го
 
 как-то так. У тебя в подписи ассемблер упоминается, я думал ты будешь в курсе. 
 
 http://dekasoftware.narod.ru
 http://www.dekagames.com
 |  |  |  |  | 
| 
| nilrem | Дата: Понедельник, 11 Октября 2010, 13:16 | Сообщение # 7 |  |   Просветленный разум Сейчас нет на сайте | Вот макрос для установки битов:   Code  #define COLOR(a,r,g,b) ((DWORD)((((a)&0xff)<<24)|(((r)&0xff)<<16)|(((g)&0xff)<<8)|((b)&0xff)))
 
 Здесь: a - прозрачность,
 r - красный,
 g - зеленый,
 b - синий.
  Пример установки непрозрачного красного. Значения должны быть в интервале 0-255.   COLOR(255,255,0,0)   Как оно работает, можно прочитать здесь - http://gcup.ru/forum/62-1558-40465-16-1258294333 
 Windmill 2
 
 WindMill 2D Game Engine
 |  |  |  |  | 
| 
| Renus | Дата: Понедельник, 11 Октября 2010, 16:55 | Сообщение # 8 |  |   почетный гость Сейчас нет на сайте | DekaSoft, nilrem Огромное спасибо! Почитал, разобрался, все работает)
 Если будут вопросы по AVR или другим чипам, обращайтесь, всегда помогу...
 Обязательно напишу вам в титрах к игре благодарность
   |  |  |  |  | 
| 
| DekaSoft | Дата: Понедельник, 11 Октября 2010, 22:00 | Сообщение # 9 |  |   почетный гость Сейчас нет на сайте | Quote (Renus) Если будут вопросы по AVR или другим чипам, обращайтесь, всегда помогу...вот это уже интересно. Может когда чего и спрошу.
   
 http://dekasoftware.narod.ru
 http://www.dekagames.com
 |  |  |  |  |