Сообщение от Hamaus
Вместе с impersonalis выяснили, что корень жука зарыт в недостаточной точности float.
|
Ну это скорее фишка стандарта (
плавающая запятая) - хранить не фиксированный объём данных под целую и дробные части, а помнить мантиссу, распределяя объём соответственно. В окрестности нуля (в виду малой по модулю целой части) дробная часть может быть представлена с большой точностью, чем дальше - тем больше сжирает целая часть, оставляя дробную голодать.
Точно такой же эффект непринуждённо получается и на
Blitz3D (где только float*) и на
Xors3D** (где пользователь не имеет подобного Огру уровня доступа к движку, а в штатной сборке - тот же float).
Алгоритмически верное общее решение - реализовывать секторную подгрузку уровня. Это позволит оставлять камеру и окружение недалеко от нуля, храня их виртуальные координаты в числах двойной точности или как либо ещё.
*здесь и далее - речь о одинарной точности
** можете даже не баловаться с entity order и parent-ми: достаточно елозить камерой далеко от нуля и устанавливать чуть перед ней entity