Это на самом деле не проблема OpenGL - она просто выполняет рендеринг.
Я не знаю ни одной готовой библиотеки Android для обнаружения столкновений в 3D, так что вам, возможно, придется делать математику самостоятельно. Эффективное обнаружение столкновений - это, как правило, искусство использования быстрых дешевых тестов, чтобы избежать более дорогого анализа. Для вашей проблемы хорошим подходом к обнаружению того, что куб A пересекает куб b, было бы сделать быстрый тест отклонения, либо
- Вычислить ограничивающие сферы для A и B - если расстояние между центрами двух сфер больше, чем сумма радиусов, то A и B не пересекаются
- Вычислить выровненные по оси ограничивающие рамки для A и B - если границы не пересекаются ( очень легко проверить ), то ни A, ни B
Если проверка границ указывает на возможное столкновение, то пришло время для некоторой математики. Отсюда можно пойти двумя путями: проверка на включение вершин и проверка на пересечение ребер / граней
Включение вершин проверяет вершины A, чтобы определить, лежат ли они в пределах B: либо поверните вершину в систему отсчета B, чтобы проверить на включение, либо используйте плоскости граней B непосредственно в frustum стиль операции.
Пересечение ребер / граней - это тестирование каждого из ребер A для пересечения с треугольниками граней B.
Хотя тест на включение вершин немного дешевле, чем тест Edge / Face, кубы могут пересекаться, не охватывая вершины друг друга, поэтому отрицательный результат не означает отсутствие пересечения. Аналогично, кубы могут пересекаться без пересечения ребра и грани (если один лежит внутри другого). Вам нужно будет выполнить несколько тестов, чтобы поймать каждое пересечение. Этого можно избежать, если вы сделаете некоторые предположения о том, как кубы могут перемещаться от кадра к кадру, то есть, если A и B не касались последнего кадра, маловероятно, что они полностью находятся в пределах B сейчас.