Форум: "Игры";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];
ВнизОграничение FPS Найти похожие ветки
← →
VolanD666 (2006-01-27 08:10) [0]Раньше, когда я создавал новый проект, то моя функция Render содержала ~ такой код:
NowTime=GetTickCount();
if ( ( NowTime-LastTime ) > 1000/OptimalFPS ) {
TempFPS=1000/( NowTime-LastTime );
LastTime=NowTime;
Render();
}
Но недавно я посмотрел несколько примеров, где этих строк просто нет!
Там просто высчитывается "коэффициент перемещения" и все, дальше идет Render(). Так нужны ли эти строки?
← →
XProger © (2006-01-27 08:15) [1]а зачем?
← →
VolanD666 (2006-01-27 08:26) [2]Ну я не знаю, во всех книгах так пишут...
← →
Cash © (2006-01-27 08:50) [3]VolanD666 (27.01.06 08:10):
На рендер ограничение както странно выглядит.
По моему оно даже незачем. А вот на перемещение я бы поставил такое,
да вобщем у меня они везде только на перемещение я стоят!
А рендер с максимальной скоростью надо бы гнать.
← →
Sphinx © (2006-01-27 09:50) [4]Это из книг пошло, где программирование под DOS рассматривали и фпс ограничивали 20-30 кадрами в секунду...
Зачем - забыл, но можно поискать, таких книг в Инете полно.
← →
Nic © (2006-01-27 10:07) [5]Вот вопрос. Стоит ли ограничивать FPS скажем на уровне 30 кадров в секунду? Когда ФПС не ограниен, процессор загружается на все 100%. А если ФПС ограничен, то программа может отъедать совем немного.
← →
Nic © (2006-01-27 10:08) [6]Больше 30 кадров в секунду человек не воспринимает, так зачем грузить процессор?
← →
cyborg © (2006-01-27 10:36) [7]Ограничивать нужно в аркадах, там большое кол-во кадров не требуется.
Большой ФПС в основном требуется в играх, где камеру вертеть можно, тут чем больше кадров в секунду, тем плавнее движение при перемещении точки зрения (камеры) будет.
← →
XProger © (2006-01-27 11:37) [8]Nic, я тебе искренне сочувствую. Сам я способен заметить кадр длительностью 10 мс в секунду :) Т.е. при 100 фпс всё чётко и ясно видно...
А зачем разгружать процессор? Способен в 2 игры одновременно играть? ;)
P.S.
25 - кадр - мифы современности ;)
← →
Nic © (2006-01-27 11:41) [9]
> XProger © (27.01.06 11:37) [8]
> Nic, я тебе искренне сочувствую. Сам я способен заметить
> кадр длительностью 10 мс в секунду :) Т.е. при 100 фпс всё
> чётко и ясно видно...
> А зачем разгружать процессор? Способен в 2 игры одновременно
> играть? ;)
>
> P.S.
> 25 - кадр - мифы современности ;)
Не обязательно ограничивать на 30 ФПС, а, скажем 50 или 100. Некоторые пользователи любят записывать компашки во время игры, которые при этом запарывабтся. В DOOM3 кажется привязка к 50 кадрам в секунду?
← →
Cash © (2006-01-27 11:43) [10]Да действительно, на скорости выше 100 квс (fps) гораздо лучше
воспринимается хыть программный курсор, который рисуется со всякими
примочками.
← →
DeadMeat © (2006-01-27 12:12) [11]http://www.nvworld.ru/docs/30fps.html
← →
XProger © (2006-01-27 12:36) [12]Nic, нет там никаких привязок, что за глупости вообще... зачем оно? :)
← →
Зм1й © (2006-01-27 14:35) [13]А как тогда перирисовывать окно, если не ограничивать fps? Я вот таймером ограничиваю, и в wm_timer вызываю InvalidateRect, а как другим способом?
← →
Кефир87 © (2006-01-27 14:44) [14]Во первых отключить к чертям верт. синхронизацию.
Во вторых (я так делаю) в бесконечном цыкле, либо принимаем сообщение (если таковое есть) либо рисуем. Вот. Никаких ограничений для фпс.
← →
Nic © (2006-01-27 15:15) [15]
> XProger © (27.01.06 12:36) [12]
Читал когда-то в какой-то статья, когда Дум 3 ещё не вышла.
> DeadMeat © (27.01.06 12:12) [11]
Спасибо, сейчас изучим :)
← →
Nic © (2006-01-27 15:17) [16]Читал когда-то в какой-то статье, когда Дум 3 ещё не вышла.
← →
Зм1й © (2006-01-27 15:22) [17]
> Во первых отключить к чертям верт. синхронизацию.
А это как? :)
> Во вторых (я так делаю) в бесконечном цыкле
Это получается, цикл надо делать не в WinProc, а после GetMessage?
(Извиняюсь за невежество)
← →
Кефир87 © (2006-01-27 15:32) [18]
>
> А это как? :)
вертикальная синхронизация, это когда back-буфер меняется местами с front-буфером с той-же частотой, что и частота вертикальной развертки монитора (в общем). Отключить (чтоб буферы менялись местами как только потребуется) можно руками, в настройках драйвера, можно программно. На ОГЛ расширение WGL_EXT_swap_control (wglSwapIntervalEXT(0)).
> Это получается, цикл надо делать не в WinProc, а после GetMessage?
>
> (Извиняюсь за невежество)
>
В WndProc вапще бесконечных циклов быть не должно! Там только обработка сообщений. Это в цикле вынимаются сообщения из очереди и посылаются на обработку в WndProc. Если же сообщения нет, то рисуем:
procedure wndLoop;
var
msg : TMsg;
begin
while is_loop do
begin
if PeekMessage(msg, 0, 0, 0, PM_NOREMOVE) then
begin
if GetMessage(msg, 0, 0, 0) then
begin
TranslateMessage(msg);
DispatchMessage(msg);
end;
end else
begin
oglRender;
end;
end;
end;
А в рендере очищаем бэкбуфер, рисуем в него и меняем местами с фронтбуфером. Все.
← →
Зм1й © (2006-01-27 15:51) [19]
> Кефир87 ©
Спасибо
← →
Gnobobel (2006-01-27 18:43) [20]Насколько я понял коэфицент перемещения это числоо, которое умножается на скорость, чтобы внезависимости от тормозов игры объекты двигались на V пикселей в определённый промежуток времени. Это так?
← →
XProger © (2006-01-27 19:01) [21]Gnobobel, так
← →
Gnobobel (2006-01-27 22:50) [22]Ладно, пойду припишу к своей гаме такое...
← →
VolanD666 (2006-01-31 19:20) [23]А коэффициент действительно действует :-)
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.066 c