Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Технологии программирования > Программирование графики
Перезагрузить страницу Спрайты и ColorKey
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
StealthLgn StealthLgn вне форума
Новичок
 
Аватар для StealthLgn
 
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 16.07.2011
Question Спрайты и ColorKey - 16.07.2011, 03:05

Direct3D 9 (2D графика)
C++ (Visual Studio 2010)
Windows XP

Задача:
Есть несколько изобажений (текстур) - это кадры анимации. У половины картинок черный фон, у другой - темносерый ; как сделать так , что бы фон не прорисовывался (то есть был прозрачный) ? пробовал через ColorKey при загрузки текстуры и альфа-тест - не помогают: часть фона уберается , но всё равно криво смотриться ; эти текстуры применялись в другой игре и я видел результат - смотрится очень четко (но код достать не могу) ; альфа каналов нет: около 50ти кадров анимации, в граф. редакторе переделывать у меня не получается, да и вообще хочу разобраться с таким механизмом ;

нужен пример кода как это сделать - с остальным разберусь сам
помогите разобраться
Спасибо.
Ответить с цитированием
  (#2 (permalink)) Старый
Odin_KG Odin_KG вне форума
Member
 
Сообщений: 956
Сказал(а) спасибо: 0
Поблагодарили 17 раз(а) в 16 сообщениях
Регистрация: 28.01.2007
По умолчанию 22.08.2011, 03:01

Цитата:
часть фона уберается , но всё равно криво смотриться ;
Возможно, что фон неоднородный - тогда надо выскребать будет всё руками, как мне кажется.

С черным фоном можно попробовать рисовать через аддитивный блендинг, это когда идет сложение. Получается, что там где черный фон, там прибавляется 0, т.е. ничего, но при этом цвета будут суммироваться. Таким способом рисуется огонь, например.
device_3d->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
device_3d->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ONE);
device_3d->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);

В DirectDraw, кстати, точно можно через ColorKey, насчет Direct3D точно не знаю. Но вообще можно написать небольшую утилиту, которая преобразует ненужную область в область с альфа-канал равным 0.
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
NET, Direct3D как использовать спрайты pokibor Программирование графики 0 26.09.2005 23:33
Как работают Спрайты и возможно ли сделать их в Delphi 7 Azure Delphi 7 08.01.2005 16:04
DirectX8: Как лучше хранить спрайты Havoc Программирование графики 4 04.03.2004 22:01



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов