Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.12;
Скачать: CL | DM;

Вниз

Ограничение 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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.076 c
3-1157779415
Guest001
2006-09-09 09:23
2006.11.12
Какую СУБД предпочесть?


9-1138866264
Nic
2006-02-02 10:44
2006.11.12
Как проверить установлена DirectX в системе и если нет, то...


2-1161895270
Ingwar
2006-10-27 00:41
2006.11.12
Можно ли создать событие на изменение переменной?


15-1161347898
Crazybeaver
2006-10-20 16:38
2006.11.12
Подскажите с сайт с бесплатной музыкой mp3


2-1162109258
Pazitron_Brain
2006-10-29 11:07
2006.11.12
Перевод Dec-->Bin и обратно