Как сделать идеальный куб - PullRequest
0 голосов
/ 27 мая 2019

В Unity я создаю куб с масштабом 1,1,1.Позиция 0,1,0.Затем я поместил его над плоскостью 15,1,5000.Позиция 0,0,0.Я проверил, если куб ниже 1 по оси Y, это будет означать, что куб упадет на плоскость.Я могу контролировать этот куб, двигаясь влево или вправо.Если я пойду налево, это не проблема.Если я пойду направо, моя позиция станет 0.9999998 ~.Это делает мою проверку падения действительной, хотя куб все еще находится на плоскости.Каким-то образом куб кажется не идеальным кубом.Надеюсь, что кто-то может объяснить мне, почему это происходит.Спасибо!

1 Ответ

3 голосов
/ 27 мая 2019

Возможно, это не тот ответ, который вам нужен, но - в плохих словах - компьютерная арифметика конечна (ищите арифметику с плавающей запятой ). Таким образом, «идеальный куб», который вы ищете, не существует в конечном представлении, которое может выполнить машина. Кроме того, Unity имеет свой собственный физический движок, который (как и все физические движки) аппроксимирует исчисление реального мира во время каждой операции (перемещение, вращение, масштабирование).

Единственный способ преодоления этой проблемы - сравнение не с точными значениями (0, 1), а с диапазонами. Чтобы поддерживать «порядок» в системе координат вашей сцены, вы также можете - через фиксированные интервалы - «корректировать» свои значения, например, вручную устанавливая значение координаты в 1, если оно находится в диапазоне от 0,95 до 1,05 (отрегулируйте значения с помощью система координат вашего мира, конечно).

Примечание по теме : в своем комментарии вы говорите: " Но я хочу сказать, что почему-то кажется, что куб не идеален 1x1x1. Почему-то он похож на 1x1x0.9999998 ". Дело в том, что система VR, как и Unity, поддерживает не размер объектов в памяти, а координаты их вершин. Вы чувствуете, что размеры объекта изменились из-за перевода, но это не совсем так строго: это всего лишь конечное приближение значений вершин для их X, Y, Z.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...