В настоящее время я работаю над созданием игры, которая находится на планете, способ, которым я планирую хранить данные, в 6 двумерных массивах, которые представляют собой карты высот вокруг сферы (на гранях куба). ,
У меня проблема в том, что, учитывая нормализованный вектор, который указывает наружу от центра сферы, как я могу определить эти две вещи:
- Плоскость, которую он пересекает
- Координаты x / y, которые я должен найти в моем 2d массиве, чтобы получить высоту.
Мое текущее решение - это (с использованием XNA):
- Построить луч, направленный из [0,0] вдоль поставляемого вектора направления. Проходите по каждой поверхности и делайте пересечение луча / плоскости (это метод, предоставляемый каркасом XNA), чтобы получить расстояние до точки пересечения. Выберите ближайшую плоскость (кратчайшее расстояние до пересечения)
- Возьмите 3D-точку и преобразуйте ее в 2D-точку, которую можно использовать для поиска в массиве, чтобы найти радиус (это бит, для которого я не могу отработать математику или найти какие-либо ссылки в Google).
Полезным ограничением является то, что система сферы / куба находится вокруг начала координат.
Итак, проблема, которую нужно решить, такова:
Учитывая вектор направления, как мне определить, где он пересекает окружающий куб. Используя этот результат, как мне получить правильное значение в двумерном массиве, который «нарисован» на поверхности этого куба?