Я принял «Теорему о разделяющей оси (SAT)», чтобы реализовать «Обнаружение столкновений OBB».Как показано ниже, для SAT требуется три элемента.
- Координаты (x, y, z) средней точки
- Длина каждой оси
Направлениевектор каждой оси
// Initialized
SATOBB::SATOBB(glm::vec3 &pos, std::vector<glm::vec3> &dir, glm::vec3 &len)
{
i_Pos = pos;
i_Dir = dir;
i_Len = len;
m_Dir.push_back(glm::vec3(0,0,0)); // Yeah... I know this strange code.. Thanks for tkausel
}
// i_... is before change, m_... is after change
void SATOBB::update(
glm::mat4 &Rotate,
glm::mat4 &Trans,
glm::mat4 &Scale
)
{
glm::vec3 m_Pos = Trans * glm::vec4(i_Pos, 1.0f);
for (int i=0; i<i_Dir.size(); i++){
glm::vec3 m_Dir = Rotate * glm::vec4(i_Dir, 1.0f);
}
glm::vec3 m_Len = Scale * glm::vec4(i_Len, 1.0f);
}
Я думаю, что код для вычисления "3".неправильно.Поэтому, пожалуйста, дайте мне знать правильный код расчета.
Для расчета я хотел использовать функцию mat4, поэтому vec3 используется для "1. & 2 .." (из соображений целесообразности)
"3".был рассчитан с использованием vec3.Достаточно ли умножить вектор на матрицу вращения?В этом проблема.