我采用“分离轴定理(SAT)”来实现“ OBB碰撞检测”。 如下所示,SAT需要三个要素。
每个轴的方向矢量
// 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计算的。 将向量乘以旋转矩阵真的足够吗? 那是问题。