Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Затухание экрана [D6, D7, WinXP]


Максим ©   (2004-05-23 06:08:00) 

Как сделать затухание экрана как в играх?


cyborg   (2004-05-29 03:39:00) [1]

Лбо менять гамму, либо в 3D свет, остальное всё чепуху советуют.


lyeh   (2004-05-29 02:03:00) [2]

2 Thor ©
Согласен, если карта не поддерживает даже гамму, то нечего вообще браться за всякого рода блендинги, разве что софтверные, типа DelphiX, но тогда какой процессор нужен! :)

Кстати, я бы не сказал, что mx400 такая уж старая, эта вещь очень даже мощная по сравнению со всякими S3 ProSavage, которые, в свою очередь, тоже с гаммой дружат.

А вообще, я не видел карты, которая поддерживала бы 3D, а гамму нет...


Thor   (2004-05-29 01:51:00) [3]


> lyeh   (29.05.04 01:00) [14]

на моей mx400 это все работает, а на машинах с еще более старой картой, игры, делаемые здесь - вряд ли пойдут.


lyeh   (2004-05-29 01:00:00) [4]

Согласен с Thor, можно гаммой, так грамотнее, но если поддержки нет, то облом. А черными тайлами и альфа-блендингом пользоваться не стоит: там определяются src-пиксел, dest-пиксел, а потом они еще и смешиваются с учетом значения прозрачности. В итоге получаем относительно высокую загрузку процессора. Изменение палитры годится для игр с 256 цветами, это что еще за игры? Шашки в окне?? Так вот, если с гаммой никак, то надо заливать весь экран эффектом Multiply постепенно уменьшая значение до нуля, здесь dest-пиксел "просто умножается" это самое значение - по сравнению с alpha это большой выигрыш в скорости

2 Ландграф Павел ©
Если он не будет тушить экран каждые 5 секунд, это не значит, что можно использовать тормозные методы.


Dabus   (2004-05-28 20:08:00) [5]

Как всегда делалось всегда и во всех играх затухание делается приводом всех цветов палитры к чёрному. Хоть лопни, но проще и правильней идеи я не видел.


NailMan   (2004-05-24 18:28:00) [6]

Гамма рампа может не у всех поддерживатся.

Я во у себя(D3D9 правда) затухание вообще 2-мя полигонами реализовал. Просто и надежно.

---
WBR, NailMan aka 2:5020/3337.13


cyborg   (2004-05-24 18:21:00) [7]

Лбо менять гамму, либо в 3D свет, остальное всё чепуху советуют.


Ландграф Павел   (2004-05-24 17:59:00) [8]

Хотя согласен... попробывал с DelphiX это реализовать... тормоза жуткие:)) а на Повере все Окэй)


Thor   (2004-05-24 15:34:00) [9]


> Ландграф Павел ©   (24.05.04 13:45) [8]

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


Ландграф Павел   (2004-05-24 13:45:00) [10]

Thor> Он что, будет тушить экран через каждые пять секунд? я так понимаю это переход между уровнями или нечто подобное... и на "ресурсы" это никак не отразится, если конечно нигра не будет создаваться под 233MHz Для ускорения процесса можно тайлы сделать размером 64х64...


Думкин   (2004-05-24 06:28:00) [11]

http://gdsw.narod.ru/Docs/gamma_cont.htm


Thor   (2004-05-23 23:37:00) [12]


> Ландграф Павел ©   (23.05.04 20:39) [5]

это будет медленно и будет жрать ресурсы.


Ландграф Павел   (2004-05-23 20:39:00) [13]

Короче делай так, выводи на экран черные квадраты (bmp), ну всмысле заполняй экран тайлами с прозрачность 255, и постепенно повышай до нуля через таймер:)


Thor   (2004-05-23 19:48:00) [14]

вот пример по Power Draw:

unit Effects;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, PInput, PowerD3D, AGFUnit, Unit2, DirectDraw, PDrawEx, DirectInput8, PowerFont, PowerTiming, DirectXGraphics,
 VTDUnit;

Procedure FadeIn(PowerGraph: TPowerGraph; Time: cardinal);
Procedure FadeOut(PowerGraph: TPowerGraph; Time: cardinal);

implementation

Procedure FadeIn(PowerGraph: TPowerGraph; Time: cardinal);
var
 i,j : integer;
 Gamma : IDirectDrawGammaControl;
 NewGamma,OldGamma : TD3DGammaRamp;
begin
 PowerGraph.D3DDevice8.QueryInterface(IID_IDirectDrawGammaControl,Gamma);
 PowerGraph.D3DDevice8.GetGammaRamp(OldGamma);
 PowerGraph.D3DDevice8.GetGammaRamp(NewGamma);
 for j := 1 to 100 do
 begin
  for i :=0 to 255 do
  begin
   NewGamma.green[i]:=(OldGamma.green[i]*j)div 100;
   NewGamma.blue[i]:=(OldGamma.blue[i]*j)div 100;
   NewGamma.red[i]:=(OldGamma.red[i]*j)div 100;
  end;
 PowerGraph.D3DDevice8.SetGammaRamp(0,NewGamma);
 Sleep(Time);
 end;
 Gamma := nil;
end;

Procedure FadeOut(PowerGraph: TPowerGraph; Time: cardinal);
var
 i,j : integer;
 Gamma : IDirectDrawGammaControl;
 NewGamma,OldGamma : TD3DGammaRamp;
begin
 PowerGraph.D3DDevice8.QueryInterface(IID_IDirectDrawGammaControl,Gamma);
 PowerGraph.D3DDevice8.GetGammaRamp(OldGamma);
 PowerGraph.D3DDevice8.GetGammaRamp(NewGamma);
 for j := 100 downto 1 do
 begin
  for i :=0 to 255 do
  begin
   NewGamma.blue[i]:=(OldGamma.blue[i]*j)div 100;
   NewGamma.green[i]:=(OldGamma.green[i]*j)div 100;
   NewGamma.red[i]:=(OldGamma.red[i]*j)div 100;
  end;
 PowerGraph.D3DDevice8.SetGammaRamp(0,NewGamma);
 Sleep(Time);
 end;
 if NewGamma.red[0]=0 then
 PowerGraph.D3DDevice8.SetGammaRamp(0,oldGamma);
 Gamma := nil;
end;

end.


kas-t   (2004-05-23 15:40:00) [15]

С компонентом DelphiX идет демка реализующая подобное действо. Но обломало то, что там затухание получается сделать только в 8 битном цвете :(.


Palladin   (2004-05-23 14:20:00) [16]

Вообще то в играх присутствует понятие источника света. И тушат обычно его, а не экран... Либо работают с палитрой текстуры.


Cerber   (2004-05-23 12:04:00) [17]

Медленно уменьшая яркость на мониторе но енто тока физически.:)


Наверх

Титульная страница Поиск, карта сайта Написать письмо