Мировые границы - (0, размер) или (-HalfSize, HalfSize)?

9

При создании игрового пространства, в котором можно перемещать, рисовать и сталкивать объекты, лучше, чтобы точка (0,0) или (0,0,0) находилась в самом центре вашего пространства так, чтобы границы миров (-halfSize, halfSize), или лучше, чтобы они были в дальнем углу вашего пространства, поэтому границы (0, размер)?

Каковы плюсы и минусы каждого и какие проблемы они влекут за собой? Или это действительно просто не имеет значения?

Это кажется незначительной деталью, но я хотел посмотреть, были ли, возможно, основные проблемы, которые я мог бы пропустить.

GarrickW
источник

Ответы:

15

Мне кажется, что лучше иметь центр вашего пространства (0, 0, 0). Предполагая, что вы используете подписанный формат для представления позиций в пространстве, центр (0, 0, 0) позволяет вам использовать как отрицательные, так и положительные части вашего формата, что может творить чудеса с точностью для чисел с плавающей точкой и диапазона для целых чисел со знаком , Это может не иметь значения для малых масштабов, но для больших масштабов это может иметь все значение, то есть до того, как вам придётся придумать новую систему полностью.

Просто для пояснения: учитывая, что вы создаете игровой мир, который, как я предполагаю, вы рендерите, конечным форматом, в который вы будете конвертировать, будет float, который, как вы знаете, является подписанным форматом. В этом случае вы можете попасть в ситуацию, когда (0, Size) не может быть представлен, тогда как (-HalfSize, HalfSize) может быть. Если вы не планируете выполнять рендеринг и можете выбрать произвольный формат, используйте любой из этих стилей, хотя я бы лично предпочел вышеупомянутый стиль.

parar
источник
+1, многие физические симуляции также используют этот диапазон, вероятно, по этой причине.
MichaelHouse
1
Полезные ссылки: altdevblogaday.com/2012/02/22/...
Leander
1
Также довольно хорошо известен, но, возможно, немного сложен для непосвященных: docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html - «Что каждый компьютерный специалист должен знать об арифметике с плавающей точкой»
Леандр
5

Это не имеет особого значения. Пока вы последовательны на протяжении всей игры.

Я полагаю, что более распространенный подход состоит в том, чтобы границы мира были сосредоточены вокруг (0,0), то есть вы бы вышли за пределы своих границ -halfSize, halfSize. Поскольку большинство структур данных, представляющих положение (Vector2 или Vector3), по умолчанию имеют нули, вы знаете, что размещение по умолчанию для объектов находится в центре мира (а не в нижнем углу).

MichaelHouse
источник