Движение при низком FPS

Работа с 2D и 3D графикой, видео, звуком.

Модератор: Mikle

GLEB
Бывалый
Бывалый
 
Сообщения: 246
Зарегистрирован: 24.05.2005 (Вт) 12:16

Движение при низком FPS

Сообщение GLEB » 29.09.2005 (Чт) 13:57

Что бы объкты перемешались с одинаковой скоростью, независимо от fps, нужно увеличивать или уменьшать шаг перемешения.
Чем ниже fps, тем больше это значение.
Вот в чем проблема, при 30 - 40 кадрах заметно что все перемещается с большим шагом.
Запустил CS, поставил самое большое разрешение, и режим отображения fps.
Всего 27 кадров при 1024х768, но рывков особо незаметно.
У меня в проге на таком разрешении 45 fps, но рывки довольно большие.
Почему так?

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 29.09.2005 (Чт) 17:13

ты ограничиваешь fps?
ХЎ

nekeda
Постоялец
Постоялец
 
Сообщения: 710
Зарегистрирован: 10.04.2005 (Вс) 23:20

Сообщение nekeda » 29.09.2005 (Чт) 20:44

Что бы объкты перемешались с одинаковой скоростью, независимо от fps, движение надо осуществлять через равные промежутки времени, а не увеличивать или уменьшать шаг перемешения.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 30.09.2005 (Пт) 15:04

nekeda
Что бы объкты перемешались с одинаковой скоростью, независимо от fps, движение надо осуществлять через равные промежутки времени

Это было бы хорошо, но вот, хотим мы того, или нет, а иногда происходит торможение по независящим от нас причинам, и компьютеры имеют разное быстродействие, это подходит разве что для приставок, у которых всегда выполняется только одна задача, и все они имеют одинаковую скорость.
Так что приходится рассчитывать перемещение исходя из прошедшего времени.
GLEB
Тут варианта два. Либо ты не правильно рассчитываешь, либо это результат неравномерного кэширования кадров. Это известный глюк DirectX. Вызывается часто какой-нибудь резидентной программой, например аськой, у меня такое вызывал твикер для разгона мамки и контроля температуры, пришлось от него отказаться.
Но с этим можно бороться - каждый кадр читать из бэк-буфера хоть один байт, правда немного снизится быстродействие.

GLEB
Бывалый
Бывалый
 
Сообщения: 246
Зарегистрирован: 24.05.2005 (Вт) 12:16

Сообщение GLEB » 30.09.2005 (Пт) 17:24

Нет, это немого не то. Просто если ФПР низкий то по любому придется к перемещению приращать большее значение. И эти скачки объектов все равно будут заметны.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 01.10.2005 (Сб) 10:10

Ты себе противоречишь, сам же привел пример CS, где FPS ниже, а скачки незаметнее.
А "перемещению приращать большее значение" - это естественно, ты что, не так делал?

nekeda
Постоялец
Постоялец
 
Сообщения: 710
Зарегистрирован: 10.04.2005 (Вс) 23:20

Сообщение nekeda » 01.10.2005 (Сб) 12:26

Mikle
Это было бы хорошо, но вот, хотим мы того, или нет, а иногда происходит торможение по независящим от нас причинам, и компьютеры имеют разное быстродействие, это подходит разве что для приставок, у которых всегда выполняется только одна задача, и все они имеют одинаковую скорость.
Так что приходится рассчитывать перемещение исходя из прошедшего времени.


Объясни плиз поподробнее? Взять, например, функцию которая возвращает кол-во милисекунд прошедших со старта винды, отсчитывать ей равные промежутки, и в эти промежутках двигать объект. О каких тормозах идёт речь?

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 01.10.2005 (Сб) 12:35

nekeda, дело в том, что функция, которая все это будет выполнять не будет работать с одинаковой частотой по причинам, изложенным Mikle'ом. Тормоза возникают из-за многих причин, ведь твоя программа не идинственная, которая руботает в системе и не может обладать всеми ресурсами системы.
ХЎ

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 01.10.2005 (Сб) 14:05

Все это верно, но я в четвертом посте имел ввиду даже не это. D3D выдает на экран картинку не сразу, а кэширует 3-4 кадра, а некоторые программы каким-то образом умудряются сбросить этот кэш. Это может проявиться не только в наших программах, а даже в солидных играх, например сам видел дерганье у NFS Underground 2, в то врямя как DOOM3, например, работал ровно. После выключения твикер от Gigabyte, NFS Underground 2 тоже стал ровно работать.

nekeda
Постоялец
Постоялец
 
Сообщения: 710
Зарегистрирован: 10.04.2005 (Вс) 23:20

Сообщение nekeda » 01.10.2005 (Сб) 14:23

d3drm
но функция которая будет "увеличивать или уменьшать шаг перемешения" тоже не будет работать с одинаковой частотой?

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 01.10.2005 (Сб) 18:44

Надо делать функцию перемещения непрерывную (от времени), а не дискретную (от номера кадра).

nekeda
Постоялец
Постоялец
 
Сообщения: 710
Зарегистрирован: 10.04.2005 (Вс) 23:20

Сообщение nekeda » 02.10.2005 (Вс) 10:14

во, я о том же. может не делать равные промежутки, а расчитывать через какое кол-во времени где должен быть объект.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 02.10.2005 (Вс) 10:45

Блин, что тут сложного. Знаешь позицию объекта и скорость, засекаешь точное время (QueryPerformance), рисуешь сцену, снова засекаешь время, ЗНАЯ СКОРОСТЬ, исходя из прошедшего времени вычисляешь новые координаты - и так до бесконечности.
Я поначалу подумал, что вопрос более сложен, а тут еще с простым не разобрались. :wink:


Вернуться в Мультимедиа

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 21

    TopList  
cron