Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 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.04 c
1-1118228609
lehich
2005-06-08 15:03
2005.06.29
использование ARJ из файла res


1-1117903664
Destroyer
2005-06-04 20:47
2005.06.29
Как динамически создавать кнопки с событиями для ActionToolBar?


14-1117599953
emfw
2005-06-01 08:25
2005.06.29
Стоимость АИС


8-1109931722
Gear
2005-03-04 13:22
2005.06.29
Проблема с ACM


9-1111326224
BREVIS
2005-03-20 16:43
2005.06.29
Где взять документацию по GLScene?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский