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

Вниз

вывод "поверх" игры   Найти похожие ветки 

 
Luka.rus   (2006-04-19 15:57) [0]

в общем, всегда интерисовался, как можно вывести графику поверх уже запущенной игры, как это делает, например, fraps. да и многие другие программы.

если есть примеры, поделитесь. нет, тогда давайте обсудим, может сможем реализовать это.

также меня смущает то, то тот же Фрапс выводит поверх практически любой игры, независимо OpenGL или Direct3D..


 
Pa5ha   (2006-04-19 17:15) [1]

Возможно он использует оверлей. Он ведь один :) Если занят, то выводит на оверлей. Чиста гипотеза.


 
Luka.rus   (2006-04-19 17:30) [2]

врядли. если создать много окон, то он будет писать в каждое из них отдельно :( как же они это делают..


 
Старик   (2006-04-19 18:05) [3]

берем GetDC нужного окна и рисуем на нем квадратики.
способ примитивен. единственное, что стоит обдумать, это как сделать, чтобы наше рисование было поверх игрового.


 
Luka.rus   (2006-04-19 18:12) [4]

дело в том, что игровое окно обновляется очень быстро, у меня в некоторых играх ФПС больше 1000. нам надо рисовать с частотой в несколько раз превышающей ФПС, и даже так скорее всего будет мерцание..


 
Luka.rus   (2006-04-19 18:20) [5]

вот этот код дает мерцание. даже если ФПС 60, в Варкрафте3:

 stop:= false;
 bmp:= TBitmap.Create;
 whd:= FindWindow("Warcraft III", nil);
 bmp.Canvas.Handle:= GetDC(whd);
 while not stop do begin
   bmp.Canvas.Draw(100,100, Image1.Picture.Graphic);
   Application.ProcessMessages;
 end;


теоретически он довольно часто должен рисовать :(


 
XProger ©   (2006-04-19 18:51) [6]

Перехватываем SwapBuffers...


 
XProger ©   (2006-04-19 19:04) [7]

http://www.yandex.ru/yandsearch?serverurl=gamedev.ru&text=Fraps


 
Sapersky   (2006-04-19 19:15) [8]

...или в случае D3D - Present/EndScene.

Теория внедрения/перехвата - см. книгу Рихтера, в электронном виде должна быть здесь: http://rouse.front.ru/
Или статьи на wasm.ru:
http://www.wasm.ru/article.php?article=apihook_1

Библиотека madCodeHook:
http://www.madshi.net
Есть пример включения wireframe в D3D играх.


 
Cash ©   (2006-04-19 19:39) [9]

С опеновскими штуками - согласен с XProger-ом, токма шприц и иньекцию
придется делать.

А для D3D есть в SDK длл-ка, называется d3dspy@.dll (где @-версия SDK),
ее можно подключть к себе и пользовать полномоштабный перехват
интерфейсов.
Дожидаемся когда срабатывает EndScene у девайса и рендерим все, что
душе только заблагорассудится.


 
Pa5ha   (2006-04-19 20:46) [10]

А windows media player на D3D или на OpenGL написан? :) Там ведь тоже фпс выводится и картинки с оверлея пизяца. Правда, в WinDVD некорректно.


 
Fosgen   (2006-04-19 21:30) [11]

Это конечно вопрос: "а WINDOWS media player на чем писан?" А что, кто-то допускает мысль о windows писанной на OpenGL? Это что-то из разряда: "А машины у сотрудников в Microsoft на чем работают - на Windows или Linux?"


 
Luka.rus   (2006-04-20 00:30) [12]

windows media player, насколько мне известно не использует ни ОГЛ ни Д3Д, хотя бы потому, что это библиотеки для работы в 3Д.

для вывода видео он иногда использует Директ. но не всегда, мне кажется это зависит от кодека.


 
XProger ©   (2006-04-20 00:56) [13]

Luka.rus, это зависит от настроек в свойствах проигрывателя ;)


 
Nic ©   (2006-04-20 09:54) [14]

Luka.rus   (20.04.06 00:30) [12]
Direct Draw/Direct Show.


 
Pa5ha   (2006-04-20 17:23) [15]

Вы не вкурили. Я к тому, что все, что здесь обсуждается по поводу перехвата свапа и endscene к фрапсу не относится и работает он по другому т.к. видео из проигрывателей он тоже грабит. Конечно, если все проигрыватели написаны на ddraw, то вопросов больше не имею.


 
Sapersky   (2006-04-20 19:24) [16]

Если не на ddraw/dshow, то обычным методом - GetDC/BitBlt.
Кстати, BitBlt неплохо работает и в D3D (быстрее, чем GetFrontBuffer/GetBackBuffer). Во всяком случае, если вызывать "изнутри", из внедряемой DLL то есть.


 
Лопух   (2006-05-30 22:52) [17]

Удалено модератором
Примечание: Создание пустых сообщений


 
XProger ©   (2006-05-30 23:01) [18]

Удалено модератором


 
Galiaf ©   (2006-06-07 05:12) [19]

Возможно я ошибаюсь но можно взять хэндл дэсктопа и прям на нём рисовать.

procedure TForm2. Button2Click(Sender: TObject);
var
dc: HDC;
begin
dc: = GetDC (0); // получаю ссылку на рабочий стол
Rectangle (dc, 10, 10, 110, 110);
ReleaseDC (Handle, dc);
DeleteDC (DC);
end;

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



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

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

Наверх




Память: 0.48 MB
Время: 0.051 c
15-1176279768
homm
2007-04-11 12:22
2007.05.06
DMClient bugreport


2-1176491619
Malik
2007-04-13 23:13
2007.05.06
Вотрос про массивы...


2-1176878709
Gentos
2007-04-18 10:45
2007.05.06
bmp -> jpg


6-1162737990
Student2007
2006-11-05 17:46
2007.05.06
Удалённое отключение компьютеров...


2-1176459620
Romm
2007-04-13 14:20
2007.05.06
Вопросик...





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