Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2005.02.13;
Скачать: [xml.tar.bz2];

Вниз

Управление экраном   Найти похожие ветки 

 
Masacre   (2004-11-05 06:31) [0]

Доброго времени суток всем!

У меня такой вопрос, как програмно увеличить яркость в определенной области экрана. Приведу пример:
В псевдо-изометрической РПГ, имеется комната, освещения в ней нет (тобишь факелы на стенах не горят), нужно еменьшить яркость экрана, чтобы независимо от наложенных на пол и стены текстур казалось, что в комнате на самом деле темно.
Затем в комнате зажигаются факелы, и нужно теперь увеличить яркость экрана, чтобы комната оказалась освещенной.
   Как вот такое в Delphi реализовать...


 
NikeOLD ©   (2004-11-05 09:00) [1]


> В псевдо-изометрической РПГ,

Это как? Бывают псевдо-трехмерные, а псевдо-изометрических не припоминаю.... Лирика

То что требуется невыполнимо, я имею ввиду яркость ЭКРАНА. Способы реализации различны в зависимости от того, что используется DirectDraw, Direct3D, OpenGL и т.д.
Под чем пишешь?
В D3D и OpenGL можно просто источник света в комнату поместить. В первом же случае - все будет зависеть от режима. В палитровом - можно увеличить интенсивности цветовых составляющих палитры, в других - либо подмена текстур (что накладно), либо, например, используя альфа-блендинг стне комнаты с прямоугольником требуемой прозрачности для освещенных участков.


 
Masacre   (2004-11-09 11:38) [2]

Не я в DELPHIX делаю... Там ничего кроме DirectDraw заюзать нельзя, ты мне расскажи как с помощью DelphiX такое сделать...


 
NikeOLD ©   (2004-11-09 12:05) [3]

Я с DelphiX не работаю, хотя... минутку...

Файл DirectX.pas - заголовочный файл для DirectDraw и всего остального барахла DelphiX. Так что ничего особенного, кроме классовой надстройки в DX я не вижу.

Теперь. В игре Diablo 1, например, использовалось несколько текстур различной яркости.
А пятно света вокруг героя... даоно увеличивалось, но получался не ровный круг, а рифленый. отсюда можно сделать вывод:
1. Берем требуемый радиус освещенности.
2. Находим все участки карты, попадающие в этот радиус.
3. Берем чистый белый квадрат (спрайт), соответствующий размеру одной клетке карты.
4. Рендерим белый квадрат поверх каждого участка, попадающего в радиус источника света. При этом, чем ближе квадрат к центру, тем ниже уровень Alpha (как он там в DX называется), чтобы спрайт карты светлел (но не абсолютный 0, иначе все белое будет); на концах радиуса прозрачнось практически максимальная (чтобы спрайт карты оставался темным).
5. Все, что я сказал в основном касается пола, а для стен см. п.6.
6. Для объектов, которые попадают в зону света... придется нарисовать более светлые текстуры. Кстати в Diablo 1, все персонажи всегда были освещены одинаково, а стены - меняли текстуры по мере необходимости.

Может кто что получше предложит.


 
Masacre   (2004-11-09 18:25) [4]

Гхы, а Альфа в DelphiX никакая, она зеленая всегда, в общем не подходит, такой способ, ты мне лучше расскажи как палитрой этой делать в DirectDraw...


 
RyDmi ©   (2004-11-09 21:38) [5]

Кстати на счёт "зелёной Альфы" это точно никак нельзя исправить? А то я тоже мучаюся со спрайтами. Может кто знает?


 
Masacre   (2004-11-10 04:57) [6]

Увы никак... Обыдно да:)

Я вот научился гамму менять, но этож ведь на все изображение на экране влияет, как на поле с игрой так и на ее интерфейс... Мне бы с палитрой разобраться, может кто-нить знает как палитрой управлять?


 
Megabyte-CeerCop ©   (2004-11-10 06:42) [7]


> Кстати на счёт "зелёной Альфы"

Что значит зелёная альфа!?
В DirectDraw есть ColorKey который может быть любого цвета.
Советую кстати делать его чёрным, т.к это единственный цвет который в любом формате RGB равен нулю, и по этому всегда вычисляется правильно. Если делать зелёным, на некоторых картах получится челёный квадрат вокруг всех Спрайтов!!! Сам видел! И очень удивился запустив свою игруху на одном несвежем компе. Хорошо что графики тогда ещё было не много, и я быстро переделал её под чёрный ColorKey

А на счёт освещения - в DelphiX единственый вариант - это сделать два типа текстур для комнаты: освещённые и не освещённые.
Есть спрайты которые поддерживают AlifaBlend, но они очень, очень медленные. Если FPS не важен, и картинка будет статичная, тогда можно использовать альфа бленд (последний не поддерживается DirectDraw и реализуется в DelphiX исключительно програмно, как и поворот спрайтов)!


 
NikeOLD ©   (2004-11-10 09:09) [8]

Для того, чтобы работать с палитрой, требуется режим 256 цветов(8 бит). Это единственный палитровый режим при котором пиксель на экране знает не свой собственный цвет, а ИНДЕКС цвета в палитре цветов Windows (она и содержит 256 значений массива, в которых, в свою очередь, записаны цветовые составляющие RGB).
Таким образом, при изменениие цвета в палитре по нужному индексу, ВСЕ пикселы на экране, которые ссылаются на этот индекс перекрашиваются.
Для работы с палитрами: SDK и структура PALETTEENTRY.

Есть одно неудобство первые 10 и последние 10 цветов зарезервированы в Windows и при некорректной работе будет беда.
Так что остается по большому счету 236 свободных элементов массива, или логические палитры LOGPALETTE.



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

Форум: "Игры";
Текущий архив: 2005.02.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.038 c
1-1106759915
skt
2005-01-26 20:18
2005.02.13
Максимальное число элементов перечисляемого типа


4-1103708142
lexis
2004-12-22 12:35
2005.02.13
Какому Process принадлежит ForegroundWindow?


6-1101985857
DelphiN!
2004-12-02 14:10
2005.02.13
Получить IP адрес клиента, подключившегося к TidMappedPortTCP


14-1106750227
Гамлет
2005-01-26 17:37
2005.02.13
Где можно посмотреть исходники интернет-магазина?


4-1103896059
korvin
2004-12-24 16:47
2005.02.13
Помогите найти фокус





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский