Думаю, вам стоит взять готовый опенсорсный движок и посмотреть, как опытные люди это делают.
За основу всех более-менее сложных алгоритмов поиска пересечения выпуклых многогранников берётся "Теорема о разделяющей оси". Суть проста: если проекции многогранников на какую-нибудь прямую не пересекаются, то они не пересекаются в пространстве. Если такой оси нет, то пересекаются. Как таковых конечных точек пересечения у них при этом не будет, будет целый многогранник этих пересечений. Но для физического движка нужно выделить некоторое количество характерных точек и этот выбор будет зависеть от той оси, которую вы сами выберете. В большинстве случаев такой осью выбирают прямую, на которой пересечение проекций минимально.
Какие оси надо проверять? Ведь их бесконечное количество.
Это зависит от топологии. В общем случае достаточно проверять оси коллениарные нормалям всех граней многогранников (в этом случае мы ищем пересечение с гранью), и оси полученные векторным произведением каждого ребра одного многогранника с каждым ребром другого (пересечение ребро - ребро). Но, так как у Бокса очень много параллельниых граней и рёбер, то все их проверять нет смысла. Так как получится куча одинаковых осей.
Итого получается, что нужно проверить 3 + 3 (грани) + 3 * 3 (пары рёбер) = 15 потенциальных разделяющих осей. В первом случае, необходимо потом будет найти пересечение грани с вершинами, и из тех вершин, что пересекают плоскость построить многоугольник и пересечь его уже в 2Д, получив от 1-й до 6-ти точек пересечения. Во втором случае ещё проще - ищем точку пересечения двух векторов.
ПС: Лучше начинать собственный движок с более простых фигур - сфер и касюлей. У них функция пересечения на пару порядков проще.