forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=108)
-   -   Xors3D(Delta Timing) (http://forum.boolean.name/showthread.php?t=8626)

Unodeya 07.07.2009 18:05

Xors3D(Delta Timing)
 
НАчал изучать ксорс! Это руль)
Написал такой дельта тайминг.. Вроде работает.. Обращаюсь к специалистам всё ли правельно сделал? Спасибо за ответ.

Global dt

xGraphics3D 1024, 768, 32, 1, 0
xSetbuffer xBackBuffer()

cube=xCreateCube()
cam = xCreatecamera()
xPositionEntity cam, 0, 0, - 5

Repeat
deltatime = MilliSecs()
xPointEntity cam, cube
xMoveEntity cube, 0, 0.01*dt, 0

xUpdateWorld()
xRenderWorld()

xFlip
dt = MilliSecs() - deltatime
Until xKeyHit(1)
End

ABTOMAT 07.07.2009 18:38

Ответ: Xors3D(Delta Timing)
 
Да вроде так.

Unodeya 07.07.2009 18:58

Ответ: Xors3D(Delta Timing)
 
Ещё вопрос, С такой дельтой на разных машинах игра будет вести себя одинакого?

IGR 07.07.2009 19:06

Ответ: Xors3D(Delta Timing)
 
у тебя dt зависти от того сколько будет идти это: :)
Код:

xPointEntity cam, cube
xMoveEntity cube, 0, 0.01*dt, 0
xUpdateWorld()
xRenderWorld()
xFlip


Unodeya 08.07.2009 01:09

Ответ: Xors3D(Delta Timing)
 
Код:


Global dt# = 60 / xGetFps()

xGraphics3D 1024, 768, 32, 1, 0
xSetbuffer xBackBuffer()

cube=xCreateCube()
cam = xCreatecamera()
xPositionEntity cam, 0, 0, - 5

Repeat
deltatime = MilliSecs()
xPointEntity cam, cube
xMoveEntity cube, 0, 0.01*dt, 0

xUpdateWorld()
xRenderWorld()

xFlip
dt = MilliSecs() - deltatime
Until xKeyHit(1)
End

А если так ??

moka 08.07.2009 01:40

Ответ: Xors3D(Delta Timing)
 
Следи за логикой dt - получается что ты умножишь скорость, на длительность цикла - тоесть чем дольше просчитывается, на тем большее число ты умножишь (но тут будет в следующий кадр). А т.к. миллисекунды сильно варьируют - будет немалая потеря точности, на мелких цыклах. Нада брать jomon'а либу, для получения более точных миллесекунд..
По сути так можно поступить - но это ненормальный способ совсем..

ABTOMAT 08.07.2009 01:45

Ответ: Xors3D(Delta Timing)
 
Цитата:

Сообщение от MoKa (Сообщение 110315)
Следи за логикой dt - получается что ты умножишь скорость, на длительность цикла - тоесть чем дольше просчитывается, на тем большее число ты умножишь (но тут будет в следующий кадр). А т.к. миллисекунды сильно варьируют - будет немалая потеря точности, на мелких цыклах. Нада брать jomon'а либу, для получения более точных миллесекунд..
По сути так можно поступить - но это ненормальный способ совсем..

Теоретики. Я всю жись юзал Millisecs() и нормальная точность. Если у тебя там не > 1000 FPS (в чём я сомневаюсь)

moka 08.07.2009 01:49

Ответ: Xors3D(Delta Timing)
 
Если фпс примерно 60 - то это ~19 миллесекунд на цикл, если фпс падает до 20 - то это уже будет около 12. Разницу между 12 и 13 в фпс не сильно учуешь, но в логике она будет. По сути нормально. Но неточности на низких фпс будут присутствовать.
Если в этой игре нету завязок с временем или сетью (что бывает редко), то так можно без проблем.

ABTOMAT 08.07.2009 17:37

Ответ: Xors3D(Delta Timing)
 
Цитата:

Если фпс примерно 60 - то это ~19 миллесекунд на цикл, если фпс падает до 20 - то это уже будет около 12.
Ты чего, у тебя при бОльшем ФПС бОльшая дельта, наоборот же ж!

60 ФПС = 17 мсек
20 ФПС = 50 мсек

Разница между 17 и 50, я думаю, ясна и без тысячных долей.

Taugeshtu 08.07.2009 18:54

Ответ: Xors3D(Delta Timing)
 
А теперь сравним дельты на ФПС-ах 1000, 1999 и 2001:
1, 1, 0
Хотя в последних двух случаях должно было быть около 0.5
Итог - способ имеет место быть, но я продолжу привязываться к ФПС как более "честной" еденице, позволяющей получать float величины дельты

ABTOMAT 08.07.2009 19:19

Ответ: Xors3D(Delta Timing)
 
Цитата:

А теперь сравним дельты на ФПС-ах 1000, 1999 и 2001:
Покажите пальцем где у вас бывает > 1000 FPS? Хотя бы > 500 ?
Цитата:

Итог - способ имеет место быть, но я продолжу привязываться к ФПС как более "честной" еденице, позволяющей получать float величины дельты
Чтобы измерить FPS нужно знать время цикла.

Taugeshtu 08.07.2009 20:20

Ответ: Xors3D(Delta Timing)
 
Вложений: 1
>>Чтобы измерить FPS нужно знать время цикла.
Или сосчитать количество кадров, прошедшее за время 1 секунды
>>Покажите пальцем где у вас бывает > 1000 FPS? Хотя бы > 500 ?
Нате: (x3d, любуюсь скайбоксом)

ABTOMAT 08.07.2009 20:52

Ответ: Xors3D(Delta Timing)
 
А в реальной игре?

Taugeshtu 08.07.2009 21:16

Ответ: Xors3D(Delta Timing)
 
Это является прототипом. Ясное дело что в реальной игре будет значительно меньше ФПС, но! Я хочу использовать дельтатайминг и в таких мелких прототипах, и хочу чтобы он работал корректно. В данном случае он бы не работал вовсе, заморозив прототип нафиг (dt=0)

Knightmare 08.07.2009 21:19

Ответ: Xors3D(Delta Timing)
 
В движке есть функции позволяющие расчитать время выполнения куска кода с высокой точностью (возвращает float значение которого равно затраченному времени в миллисекундах). Если реально надо - завернуть не долго.


Часовой пояс GMT +4, время: 09:56.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot