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

Вниз

Затухание экрана   Найти похожие ветки 

 
Максим   (2004-05-23 06:08) [0]

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


 
Cerber ©   (2004-05-23 12:04) [1]

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


 
Palladin ©   (2004-05-23 14:20) [2]

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


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

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


 
Thor ©   (2004-05-23 19:48) [4]

вот пример по 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.


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

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


 
Thor ©   (2004-05-23 23:37) [6]


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

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


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

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


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

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


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


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

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


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

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


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

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


 
NailMan ©   (2004-05-24 18:28) [12]

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

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

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


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

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


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

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

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


 
Thor ©   (2004-05-29 01:51) [15]


> lyeh   (29.05.04 01:00) [14]

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


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

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

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

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


 
cyborg ©   (2004-05-29 03:39) [17]

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



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

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

Наверх




Память: 0.48 MB
Время: 0.039 c
3-1093931276
nalsur2002
2004-08-31 09:47
2004.09.26
Delphi и MSSQL


4-1092484250
leonidus
2004-08-14 15:50
2004.09.26
Функция определения свободного места на винте


8-1088739507
jb
2004-07-02 07:38
2004.09.26
Площадь полигона


1-1095069384
Mishel
2004-09-13 13:56
2004.09.26
Clipboard: ограничения по размеру


4-1092250264
Forelli
2004-08-11 22:51
2004.09.26
Как обращаться к окнам созданным с помощью CreateWindow?





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