Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.02.2011, 13:11   #1
Кипящий чайник
Форумчанин
 
Регистрация: 17.12.2009
Сообщений: 101
По умолчанию цветовой ключ vs альфа-канал

Переводя книжку "Programming Linux Games", а затем и рассматривая листинги кодов, описанных в книге (их надо скачать с сайта книги), я не раз задавался вопросом, каким методом лучше программировать графический движок так, чтобы какие-либо участки на спрайтах не отображались в процессе отрисовки. Используется библиотека SDL.
Первый способ - это цветовой ключ (color keying), и только он подходит для обработки .bmp.
Второй способ - а если я использую формат .png? Там есть свой альфа-канал, и достаточно просто инициализировать его для нужных поверхностей и забыть о цветовом ключе вообще.
И всё же мне не даёт покоя одна вещь. Во-первых, чтобы обработка графики шла быстрее, можно использовать функцию SDL_DisplayFormat(SDL_Surface* surf), но она "убивает" альфа-канал на поверхностях. А я хочу отбить себе как можно больше производительности. И это повод для второго объекта моего беспокойства: так что же даёт меньше нагрузки - альфа-канал или цветовой ключ? В конце концов, хоть я ещё и не пробовал, но наверняка цветовой ключ подходит и к формату .png.
Кипящий чайник вне форума Ответить с цитированием
Старый 01.02.2011, 14:03   #2
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
чтобы какие-либо участки на спрайтах не отображались в процессе отрисовки.
С ходу вспоминается только TransparentBlt
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 01.02.2011, 14:58   #3
Кипящий чайник
Форумчанин
 
Регистрация: 17.12.2009
Сообщений: 101
По умолчанию

Нет, вы неправильно поняли. Я знаю обе функции, и как ими пользоваться (и пользовался неоднократно): SDL_SetColorKey(SDL_Surface* surf, int flags, int colorkey) и SDL_SetAlpha(SDL_Surface* surface, int flags, int alpha). Вопрос в том, что потребляет меньше ресурсов.
Кипящий чайник вне форума Ответить с цитированием
Старый 01.02.2011, 15:11   #4
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
Вопрос в том, что потребляет меньше ресурсов.
Ну по логике с СOLORKEY, поскольку при отрисовке с альфа каналом рассчитывается прозрачность всех точек, а при COLORKEY точки нужного цвета просто отсекаются.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 01.02.2011, 16:28   #5
Кипящий чайник
Форумчанин
 
Регистрация: 17.12.2009
Сообщений: 101
По умолчанию

Что ж, скорее всего, это действительно так. Альфа-эффект оставлю для спецэффектов. Кстати, кто-нибудь пробовал colorkey на поверхности, куда было загружено изображение формата .png? Именно с использованием SDL.
Кипящий чайник вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавить точечному рисунку альфа канал, что бы рисунок воспринимался функцией AlphaBlend Son Мультимедиа в Delphi 3 11.02.2010 16:46
Как поместить в компонент ImageList иконки 32бит + Альфа Канал? KyzDmitry Компоненты Delphi 1 04.07.2009 15:48
цветовой ключ на WinApi ? Ulex Gamedev - cоздание игр: Unity, OpenGL, DirectX 2 11.05.2009 17:30
Альфа-канал NeiL Мультимедиа в Delphi 1 28.02.2008 15:33
GDI+ и альфа канал в Delphi for Win32 murtix Мультимедиа в Delphi 2 06.10.2007 00:09