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