Форум: "Игры";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
ВнизДинамической освещение в 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.045 c