![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Синхронизация по времени
Juster~ © (2003-02-11 17:29:00)
Здравствуйте! Мне нужно чтобы скорость анимации в OGL программе не зависела от FPS. А то у меня если 1 обьект на экране, то FPS=~90 и все двигается быстро, а если 10 обьектов, то FPS снижается и соответственно снижается скорость. Это все потому, что я пользую обычный цикл прорисовки (как у Jan Horn"a). А нужно чтоб все по атомным часам шло :) Кто знает?
Juster~ (2003-02-14 14:44:00) [21]
Мне стыдно говорить, но...я давно удалил хелпы по Дельфи (лишние файлы стирал), а инсталлятора пока нет. Большая просьба прислать на мэйл: juster.seth@mail.ru Спасибо!
Anatoly Podgoretsky (2003-02-14 12:29:00) [22]
К этому просто нечего добавить!
Пройди этим путем и с непоянтками сюда.
pasha676 (2003-02-14 11:56:00) [23]
Функции API я знаю хреново (даже хуже). Я лучше знаю как найти нужное в хэлпе.
Вызываю из дельфина хелп по Windows SDK. Набираю в поиске слово timer и (о чудо!!!) мне появляется About Multimedia Timer.
Потом пробую делать и если у меня что то не получается то читаю еще раз или задаю вопрос на форуме.
Juster~ (2003-02-13 19:08:00) [24]
Спасибо за дельные советы.
-> Pasha676: Ты, наверное, ф-ции API хорошо знаешь, а я вот не очень. Поэтому просьба поподробнее, как организовать свой таймер
-> All: А как это дело реализовано в серьезных проектах, кто-нибудь знает?
pasha676 (2003-02-13 11:54:00) [25]
Извиняюсь описался. В смысле описАлся :). Не так написал вообщем.
Anatoly Podgoretsky (2003-02-13 10:41:00) [26]
Я еще не совсем Подгорел :-)
Это из стандартных системных, вероятно и в DirectX есть что нибудь специализированное.
pasha676 (2003-02-13 10:39:00) [27]2Darthman ( используя API)
2Darthman
Нафига такой гемор. Он и по быстродействию будет хуже и в исполнении далеко не самый удачный вариант.
Juster
Имхо - слушай Подгорельского. Организуй свой таймер (используя API). Это достаточно просто.
Darthman (2003-02-13 04:53:00) [28]
2Juster:
Делаешь (например, как самый простой вариант) таймер, с интервалом 1. Неважно, сколько он выдаст, суть не в этом.
Объявляешь глобальные переменные:
ThisTickCount, LastTickCount, ElapsedTime : DWORD;
При старте приложения:
ThisTickCount:=GetTickCount();
В обработчике таймера:
LastTickCount:=ThisTickCount;
ThisTickCount:=GettickCount();
ElapsedTime:=ThisTickCount-LastTickCount;
Вот в переменной ElapsedTime будет точное время в мсек. с последней проверки. Делаешь из этого нужные коэффициенты и вперед.
Anatoly Podgoretsky (2003-02-12 19:58:00) [29]
В справке Multimedia Timer Functions
Juster~ (2003-02-12 19:43:00) [30]
->Anatoly Podgoretsky: если не сложно, скажи где найти его можно
->Darthman: про GetTickCount я знаю, но чем он поможет? И насчет тиков процессора поподробнее, пожалуйста
Anatoly Podgoretsky (2003-02-12 14:15:00) [31]
Есть же мультимедиа таймер, срабатывание до 1 мс, если система позволит.
Darthman (2003-02-12 14:07:00) [32]
А не проще привязаться к тикам процессора, или на худой конец к GetTickGout() ?
A_n_t (2003-02-12 11:08:00) [33]
Канэчно!
коэффициент = 90/FPS
при 90 FPS будет равен 1
при 45 FPS будет равен 2
То есть при понижении FPS будет увеличиваться коэффициент, что и требовалось!
P.S. Единственная проблема: при резких перепадах FPS будут скачки.
Juster~ (2003-02-11 20:03:00) [34]
А может просто использовать коэффициент при расчетах движения, который зависит от времени прошедшем между итерациями цикла?
pasha676 (2003-02-11 18:55:00) [35]
Простейший способ - цикл прорисовки идет по таймеру в 1/25 сек.
Это есссесно не гарантирует все как по атомным часам. Но во многом поможет.
Ketmar (2003-02-11 18:28:00) [36]
с часам сложно. придётся свой драйвер делать, часы искать. опять же Windows -- не RealTime OS.
Satanas Nobiscum! 11-Feb-XXXVIII A.S.