Я пытаюсь разработать алгоритм обнаружения столкновений для создаваемого мной собственного клиента Minecraft. По сути, весь мир состоит из кубов, и игрок (или камера) должен иметь возможность стоять и двигаться против этих кубиков. Результат, который я хочу, показан на этом изображении:
Зеленая линия - это вектор движения игрока. Когда игрок касается плоскости одного из кубов, я хочу, чтобы вектор изменился на тот, который перпендикулярен плоскости. Вектор, однако, должен сохранять всю свою скорость в направлении плоскости, но терять всю скорость по направлению к плоскости.
Надеюсь, я прояснил свой вопрос. Каков наилучший и наиболее эффективный способ реализовать такую систему обнаружения столкновений? Кроме того, будет ли такая система допускать простой компонент гравитации?
РЕДАКТИРОВАТЬ: Забыл упомянуть, что кубики хранятся в трехмерном массиве [x, y, z].