Я уже давно замечаю одну особенность в моих приложениях: если я буду двигать объект каждый кадр в каком нибудь направлении то его со временем начнёт трясти причём чем дальше объект отлетит от начала системы координат(0, 0, 0) тем больше будет тряска я заметил что тряска напрямую зависит от частоты кадров к примеру если FPS 75 то трясти начнёт где-то около 5000 от начала системы координат, а если FPS 2000 то трясти начнёт уже около 1000. Если долететь до 100 тысяч то объект начинает так трясти что он пропадает с экрана и повороты векторов становятся сильными и прерывистыми. Пожалуйста объясните с чем может быть связан такой баг и как его исправить.
"float имеет погрешность"
Может это проблема?
fps = 60
всё остальное не фпс.
ilusha_nil
> "float имеет погрешность"
> Может это проблема?
Именно тут. Зависимость скорости наступления проблемы от fps объясняется разным значением dt.
Думаю тебе надо сдвигать систему координат, т.е. начало координат, иначе float не справляется
Например брать floor от позиции камеры.
ilusha_nil
> "float имеет погрешность"
> Может это проблема?
не может, а в этом.
kroonk
Когда куда-то далеко-далеко улетаешь, то перемещай не камеру в "далёко", а "весь мир" к камере.
Помница, работали над тренажером военного камаза. Так у нас была карта загородного маршрута и умники, дизайнеревшие эту карту, по кой то ляд не центровали ее а удвинули на 500 км от центра. Поскольку фпс был на уровне 30-40 (:-(( дрожание самой картинки не было замечено. Но вот зеркала (рассчитывались по всем законам отражения так как предполагалось использовать оборудование отслеживания перемещения головы) - дрожали шомандец. Хотя когда приехали ПЗшники на приемку и спросили "штозанах"- мы думали "всебля, приплыли". Ан нет - генеральный директор (кстати не знавший про эти проблемы) на полном серьезе объяснил воякам, что типа так задумано - дрожит от вибрации двигателя.... и мля проехали мы это...
NIXIUS
:D
Веселая история!
ksacvet777
> Когда куда-то далеко-далеко улетаешь, то перемещай не камеру в "далёко", а
> "весь мир" к камере.
то-есть проблема в камере? я её на хвост объекту вешал но видно было что дрожит объект а не камера. А можно как-нибудь по другому исправить эту проблему или это единственный выход?
ilusha_nil
> float имеет погрешность
Можно ли как-то исправить эту погрешность?
Ещё я тут придумал вот-что: у меня в приложении максимальная дистанция отлёта от центра - 100 000 000 000 000 надо на время отрисовки все величины поделить на 100 000 000 000 и того: 100 000 000 000 000 / 100 000 000 000 = 1000 а при одной тысяче трясти не будет.
kroonk
> максимальная дистанция отлёта от центра - 100 000 000 000 000 надо на время
> отрисовки все величины поделить на 100 000 000 000
Не совсем так. Точности от деления ну никак не прибавится.
Мир нужно побить на непересекающиеся фрагменты, и геометрию в каждом описывать относительно локального центра фрагмента.
kroonk
Покажи, как считаешь dt
kroonk
> > float имеет погрешность
> Можно ли как-то исправить эту погрешность?
Можно использовать double, возможно этого будет достаточно. Но расчеты будут идти чуть медленнее, думаю в твоём случае это не критично.
kroonk
> Ещё я тут придумал вот-что: у меня в приложении максимальная дистанция отлёта
> от центра - 100 000 000 000 000 надо на время отрисовки все величины поделить
> на 100 000 000 000 и того: 100 000 000 000 000 / 100 000 000 000 = 1000 а при
> одной тысяче трясти не будет.
Нет, такое решение не пойдет. И вообще 100 000 000 000 000 слишком большое число для float.
Почитай как float хранится в памяти и все станет более ясно.
ilusha_nil
> Можно использовать double, возможно этого будет достаточно
Кидать в видеокарту их - кощунство.
ilusha_nil
> И вообще 100 000 000 000 000 слишком большое число для float.
^=^
Тема в архиве.