Можно ли умножить матрицу вращения, чтобы повернуть вектор направления (vec 3)? - PullRequest
0 голосов
/ 21 февраля 2019

Я принял «Теорему о разделяющей оси (SAT)», чтобы реализовать «Обнаружение столкновений OBB».Как показано ниже, для SAT требуется три элемента.

  1. Координаты (x, y, z) средней точки
  2. Длина каждой оси
  3. Направлениевектор каждой оси

    image

// 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.Достаточно ли умножить вектор на матрицу вращения?В этом проблема.

...