Форум: "Игры";
Текущий архив: 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