Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.06.29;
Скачать: CL | DM;

Вниз

Динамической освещение в PowerDraw3/DirectX   Найти похожие ветки 

 
Smab   (2005-03-17 17:29) [0]

Подскажите пожалуйста какой-нибудь способ создания нормального динамического освещения в 2д игре, использую PowerDraw3.
Метод с освещением(установкой цвета в зависимости от света) вершин спрайтов, предложенный тут не подходит. Может кто-нибудь знает дургой способ? Помогите пожалуйста.


 
dRake ©   (2005-03-17 17:52) [1]

С использованием _только_ функциональности PD не получится.
Я делал с помощью рендера в текстуру.


 
A22 ©   (2005-03-17 18:03) [2]

вариантов-то немного. либо цвет вершин менять, либо текстуру освещения накладывать, либо под освещенные участки отдельно геометрию формировать (что-нибудь вроде конуса света от прожектора)
уточни что и как тебе освещать нужно


 
Smab   (2005-03-17 21:24) [3]

dRake ©   (17.03.05 17:52) [1]
Я делал с помощью рендера в текстуру.
Это как?


 
dRake ©   (2005-03-17 23:35) [4]

Ну я объясню алгоритм, если понравится могу и реализацию подсказать....

Создается лайтмап - текстура размером с бэкбуффер.

после завершения всех отрисовок делаем:

1) заливаем лайтмап каким-то цветом (или если есть и статический лайтмап, копируем в нашу текстуру соответствующий кусок статического лайтмапа, вообщем вариантов куча =)
2) рендерим на него все источники света попадающие в экран в соответствующих координатах с effectAdd
3) рендерим лайтмап на бэкбуффер с effectMul

Короче чтобы было попонятнее нарисую картинку...

http://dopesoft.net/img/Light.jpg


 
Smab   (2005-03-18 08:44) [5]

dRake ©   (17.03.05 23:35) [4]
Все текстуры, которые ты тут упоминаешь - это чистые TAGFImage?
Ты наверное упоминаешь рендер средствами DirectX - SetRednerTarget и т.д.? Если да, то возникает такой вопрос: как потом отрендерить полученную IDirect3DTexture9 текстуру?
>>Короче чтобы было попонятнее нарисую картинку...
Понятно, спасибо=)


 
dRake ©   (2005-03-18 11:46) [6]

Все текстуры которые я упоминаю - это TAGFImage.
В принципе этот самый TAGFImage есть ни что иное как небольшая надстройка над IDirect3DTexture9;
Но тут есть одна проблема - чтобы создать текстуру с возможностью рендера в нее необходимо прописать во-первых D3DPOOL_DEFAULT а
во-вторых D3DUSAGE_RENDERTARGET, кроме того полученая текстура не лочится, загружать в нее данные надо другим способом.

Что тебе надо будет сделать:
немного дополнить Create() и Initialize() у TAGFImage, и добавить в описание типа одно свойство, которое будет отвечать за тип текстуры. Конструктор будет выглядеть так Create(TexMode : byte);
В Initialize будет проверяться TexMode и если оно будет например
TM_DEFAULT то будет создана обычная текстура

D3DDev.CreateTexture(TexWidth, TexHeight, 1, 0, TexFormat,  D3DPOOL_MANAGED, Texture)

а если TM_RENDERTARGET то с возможностью рендера в нее

D3DDev.CreateTexture(TexWidth, TexHeight, 1, D3DUSAGE_RENDERTARGET, TexFormat, D3DPOOL_DEFAULT, Texture);

Дальше придется переписать метод LoadFromFile()

Если текстура с TM_DEFAULT то пусть грузится, а для текстуры с TM_RENDERTARGET надо написать другой метод.

Алгоритм такой:

1) Создаем промежуточную текстуру обязательно в системной памяти
таких же размеров и с таким же форматом пиксела как и у subj

D3DDev.CreateTexture(TexWidth, TexHeight, 1, 0, TexFormat, D3DPOOL_SYSTEMMEM, Dummy);

2) Забиваем в нее данные так же как и для обычной текстуры
3) Копируем данные из нее в subj

D3DDev.UpdateTexture(Dummy, Image.Texture);

4) Dummy := nil; удаляем текстуру

Если все это у тебя запашет то потом просто

// Запоминаем текущую пов-ть юекбуффера
PD.D3DDev.GetRenderTarget(ScreenSurface);

// Получаем пов-ть с 0 mipmap уровнем из нашей текстуры
Image.Texture.GetSurfaceLevel(0, ImgSurface);

// Устонавливаем отрисовку на полученную пов-ть
PD.D3DDev.SetRenderTarget(ImgSurface, nil);

// Рисуем
PD.BeginScene;

{..........}

PD.EndScene;

// Возвращаем таргет на пов-ть бекбуффера
PD.D3DDev.SetRenderTarget(ScreenSurface, nil);


 
Ландграф Павел ©   (2005-03-19 15:40) [7]

Кинь мне плиз правленые юниты, если не сложно...


 
dRake ©   (2005-03-20 13:44) [8]

Они у меня очень жестко правлены =)
Я там всю структуру перекопал...

Ну если хочешь могу скинуть


 
Cash ©   (2005-03-20 14:01) [9]

Конечно PD3 мощнее и круче (без Б) но я использую Omega9f
{http://64.22.203.135/modules/mydownloads/}
там освещение без проблем создается.
(другой факт - немного более тяжелая библиотека и дает меньшие FPS, да я все равно не жадный - ставлю 30 и ничего)


 
Ландграф Павел ©   (2005-03-20 15:08) [10]

dRake>кинь - посмотрю=)


 
dRake ©   (2005-03-20 20:24) [11]

На лови:

http://dopesoft.net/files/MyPD.rar

только учти я там PowerInput еще не успел переделать =)
А по части графики почти все.


 
Ландграф Павел ©   (2005-03-20 20:40) [12]

Я PowerInput не использую=)



Страницы: 1 вся ветка

Текущий архив: 2005.06.29;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.058 c
3-1115988608
Inuendo
2005-05-13 16:50
2005.06.29
форматирование полей в DBGrid


1-1118096582
Gopher
2005-06-07 02:23
2005.06.29
команда GetWindowsDir


4-1114784588
Виталик
2005-04-29 18:23
2005.06.29
Соответствие классов в Delphi и Си


4-1115201596
balamutik
2005-05-04 14:13
2005.06.29
Получение текста из адресной строки explorera


3-1116153138
Layner
2005-05-15 14:32
2005.06.29
Как отловить событие возникающее при редактировании в гриде