![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Загрузка процессора [Windows]
DillerXX © (2007-01-10 21:24:00)Пишу тут скриптсейвер. Если делать основной цикл без слипов, то картинка движется правно, всё хорошо. Но, загрузка проца 100%, это как-то не этично, да и вообще, делают же люди по-нормальному. В любых играх, например ElastoMania, в меню загрузка проца маленькая, хотя шарики там бегают. Если поставить хоть Sleep(1), загрузка уменьшается до 0%, но появляются дёрганья, слишком мало управления получает поток :( Как этого можно избежать? Изменение приоритета нити(потока) процесса никак не помогает...
XProger (2007-01-16 14:06:00) [1]100% в диспетчере задач ещё не значит что процессор выполняет "полезную работу". У меня в проекте нагрузка 100% и при этом в цикле рендера я без ущерба для FPS могу запускать циклы порядка 10 000 000 сложений...
Vga (2007-01-16 10:07:00) [2]> [40] DillerXX © (13.01.07 12:40)
> Я не понял, тоесть 1 обновление экрана за секунду?! Ужас...
> Как это вообще может быть...
Меньше даже
> Фигасе, как это как может быть... Там же не слипов, должна
> быть загрузка 100%. Как у тебя с движением в обоих программах?
В 65fps - нормуль, в 300fps - как может выглядеть движение при 1FPS?
Видимо в 300fps ты что-то накосячил.
> [43] ors_archangel © (14.01.07 20:46)
А сколько он в том же меню выдает FPS? Вот тут и оптимизации... Игры такие все практически грузят проц на 100%.
grisme (2007-01-16 04:32:00) [3]да я имел ввиду, что в Quake этот нагруз на CPU не особо заметен - точнее совсем не заметен :] Я понимаю, что нужно придерживаться точного определения ScreenSaver(то, что должен кушать мало ресурсов), но нагрузка в 100%, если сделать ее незаметной - не столь существенна.
ors_archangel (2007-01-14 20:46:00) [4]grisme[42]
Тогда уж протокол подари :) Ладно, извини меня, грешного, пожалуйста. Но насчёт оптимизации не понял, что ты имел в виду. Движки id действительно быстрые, но если меню грузит 100%, то тут какие оптимизации имеются в виду?
grisme (2007-01-14 20:04:00) [5]ors_archangel © (10.01.07 22:08) [10]
аха, ты думаешь ты настолько умнее ребят из ID, что они совсем упустили из рук оптимизацию? ххххех..
точно так же, отчего-то не видел чтобы "давали http"...сервер тебе подарить? так эта, к хостерам, к хостерам...
ЗЫ. ответ на буквоедство
_no_name_ (2007-01-14 04:06:00) [6]
int Sys_Milliseconds (void)
{
int curtime;
static int base;
static bool initialized = false;
if (!initialized)
{ // let base retain 16 bits of effectively random data
base = timeGetTime() & 0xffff0000;
initialized = true;
}
curtime = timeGetTime() - base;
return curtime;
}
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
MSG msg;
int time, oldtime, newtime;
oldtime = Sys_Milliseconds ();
while (true)
{
while (PeekMessage (&msg, NULL, 0, 0, PM_NOREMOVE))
{
if (!GetMessage (&msg, NULL, 0, 0))
Sys_Done ();
TranslateMessage (&msg);
DispatchMessage (&msg);
}
do
{
newtime = Sys_Milliseconds ();
time = newtime - oldtime;
} while (time < 1);
UpDateInputs (time);
UpDateScreen (time);
oldtime = newtime;
}
}
DillerXX (2007-01-13 12:40:00) [7]
> circles_fps300 - FPS менее единицы на взгляд...
> Версия с 300 фпс благополучно отрисовывала 1 кадр в секунду(по
> показаниям Fraps'a).
Я не понял, тоесть 1 обновление экрана за секунду?! Ужас... Как это вообще может быть...
> Sleep(0) попробуйте еще
Не помогает.
> я что-то не понял, CIRCLES_fps300.exe дает нагрузку от нуля
> до двух процентов на проц
Фигасе, как это как может быть... Там же не слипов, должна быть загрузка 100%. Как у тебя с движением в обоих программах?
Rouse_ (2007-01-13 12:02:00) [8]я что-то не понял, CIRCLES_fps300.exe дает нагрузку от нуля до двух процентов на проц, CIRCLES_fps65.exe от нуля до единицы. Что за проблему вы обсуждаете?
Piroxyline (2007-01-13 11:53:00) [9]Sleep(0) попробуйте еще
Vga (2007-01-13 11:27:00) [10]> [36] @!!ex © (13.01.07 09:42)
У меня такие же сомнения... Зачем сделал именно так уже и сам не помню... Вроде какая-то причина была.
@!!ex (2007-01-13 09:42:00) [11]А зафиг ее каждый кадр трогать?
Вроде достаточно один раз установиьт в начале работы приложения.
Vga (2007-01-13 04:03:00) [12]> [33] DillerXX © (12.01.07 17:11)
circles_fps65 - хорошо работает, плавное движение
circles_fps300 - FPS менее единицы на взгляд...
65FPS - для плавного движения более чем достаточно, ТВ хватает 25FPS. Рывки наверняка из-за нестабильности временных интервалов между кадрами.
А по теме - используй вертикальную синхронизацию. В openGL она вполне управляема. Работает естественно только при двойной или более буферизации.
Сама вертикальная синхронизация у меня сделана так:
if WGL_EXT_swap_control and (FVSync<>wglGetSwapIntervalEXT)
then wglSwapIntervalEXT(FVSync);
SwapBuffers(FDC);
Это в конце отрисовки. FVSync - целочисленная, при 1 вертикальная синхронизация включена, при 0 - выключена.
@!!ex (2007-01-12 18:42:00) [13]1) Запустил версию с 65 фпс. ИМХо все замечательно. Движение плавное, никаких дерганий не заметил.
варианта три:
а) со зрением проблемы(врядли, в своем проекте вроде даже дергание отдельных пикселей вижу)
б) проблемка в разнице оборудования.
в) автор гонит.
2) Версия с 300 фпс благополучно отрисовывала 1 кадр в секунду(по показаниям Fraps'a).
3) пересечение двух сфер - этож вроде банальность, нафиг курс векторной алгебры? Если расстояние между центрами меньше суммы радиусов - значит коллизия есть, сила тож вродь не сложно считается...
4) То что сферы слепялются судя по тому что я вижу - это баг?
Кстати, через несколько секунд после сцепления они подъехали к краю сцены, большая сфера остановилась, а меньшая начала дергаться между стеной и большей сферой....
5) Это вообще что подразумевается?
DillerXX (2007-01-12 17:11:00) [14]Вы посмотрите файлы, невооружённым глазом с двух метров видно что 65 фпс слишком мало.
Da Stranger (2007-01-12 11:41:00) [15]Проверку столкновений, движение и прочую физику можно делать чаще чем текущий FPS. То есть выбираешь минимальный нужный FPS, обычно это 30, можно 60, помню мне как-то нужна была точность в 1000 FPS для расчёта FPS-независимой инерции, а дальше делаешь так (в процедуре прорисовке кадра):
procedure Proceed(DeltaTime: Single);
const
MIN_DELTA = 0.1; //10 FPS
begin
while DeltaTime > MIN_DELTA do
begin
DoMove(MIN_DELTA);
DoCollisionCheck(..);
DoSmthElse(MIN_DELTA);
DeltaTime := DeltaTime - MIN_DELTA;
end;
DoMove(DeltaTime);
DoCollisionCheck(..);
DoSmthElse(DeltaTime);
end;
ors_archangel (2007-01-12 07:32:00) [16]
> > вот это для меня не очевидно, почему не удивительно?
> Слип > позволяет делать лишь 65 фпс, что недостаточно. Дерганий
> > не будет либо при синхронизации с монитором, либо при
> уменьшении > скорости движения. Но последнее неприятно.
> А первое так > вообще даже не знаю, на сколько я понял это
> cв-во драйверов > конкретной видюхи, а значит ненастраиваемо
> для меня.
> Чтож у тебя за задача, что 65 фпс не достаточно?
Присоединяюсь - 30 fps всегда хватало с головой
DillerXX (2007-01-11 23:29:00) [17]Забыл добавить :) Особая гордость - расчёт столкновений делал полностью сам, не пользуясь формулой которая валяется на каждом углу (понять её так и не смог, поэтому расчитал сам). Курс векторной алгебры не прошёл напрасно ;)
DillerXX (2007-01-11 23:23:00) [18]
> Как привязку ко времени делать - в курсе?
Да потом уже догадался что надо и как, так что вкурсе. Проблема будет при проверке коллизий, т.к. при большом фпсе фактическое передвижение объектов за квант времени будет очень мало, а значит столкновение может просчитаться ещё раз... Я тебе даже могу ехе's скинуть с 65 фпс и 300 фпс. Заметна разница будет.
http://dillerator.chat.ru/circles_fps_diff.rar скачивать либо качалкой либо FireFox'om или Oper'oй, а то IE что-то глючит на это серве. Там будет вестись output.txt файл с фпс за каждую секунду. Если кому интересно можете посмотреть. Потом добавлю разные красивости, расчёт трения-вращения, текстуру с альфа-каналом, фон, может быть звуки ну и так далее.. очки двойных столкновений, бонусный шарик )) или управление мышкой.
Модель пока начальная, погоняйте примерно 2-3 минуты файл с 300 фпс, там 2 шарика в конце сцепятся и будут вальс танцевать... :)) Кстати прикольно, сотая доля начального угла полёта одного шарика в корне поменяет всю дальнейшую судьбу системы. Терия Хаоса прям...
@!!ex (2007-01-11 22:54:00) [19]
> Нету привязки. Я только потом про неё подумал, т.к. писать
> графические программы начал только позавчера. И об элементарных
> правилах этого дела не знал. Да и сейчас собственно не знаю,
> но изучаю :) Рабочая модель уже готова. Нужно исправить
> в ней выявившиеся деффекты, и затем перевести на динамический
> фпс (с привязкой ко времени естественно).
Как привязку ко времени делать - в курсе?
> вот это для меня не очевидно, почему не удивительно? Слип
> позволяет делать лишь 65 фпс, что недостаточно. Дерганий
> не будет либо при синхронизации с монитором, либо при уменьшении
> скорости движения. Но последнее неприятно. А первое так
> вообще даже не знаю, на сколько я понял это cв-во драйверов
> конкретной видюхи, а значит ненастраиваемо для меня.
Чтож у тебя за задача, что 65 фпс не достаточно? :))
Вспомни любую игру. Как она себя ведет при 30 кадрах в секунду?
Видно дискретность? Нифига.
Что за проекто делаеш? Хоть скин кинь.
Интересно ж.
DillerXX (2007-01-11 22:21:00) [20]
> @!!ex
Нету привязки. Я только потом про неё подумал, т.к. писать графические программы начал только позавчера. И об элементарных правилах этого дела не знал. Да и сейчас собственно не знаю, но изучаю :) Рабочая модель уже готова. Нужно исправить в ней выявившиеся деффекты, и затем перевести на динамический фпс (с привязкой ко времени естественно).
> Не удивительно что при Слипе кадры дергаются...
А вот это для меня не очевидно, почему не удивительно? Слип позволяет делать лишь 65 фпс, что недостаточно. Дерганий не будет либо при синхронизации с монитором, либо при уменьшении скорости движения. Но последнее неприятно. А первое так вообще даже не знаю, на сколько я понял это cв-во драйверов конкретной видюхи, а значит ненастраиваемо для меня.