旋转对象 AABB 更新不正确

Rotating object AABBs updating incorrectly

旋转物体时,围绕腿的 AABB 不会随腿移动。相反,它们相对于物体停留在同一位置,只是简单地增加尺寸以将腿保持在 AABB 中,而不是随腿移动。 这是由于这些 AABB 中的每一个都具有相同的位置,即主要对象本身的位置。

让我们假设下面的代码在每一帧都被调用,是否有可能让这些 AABB 正确遵循。 (我不是要求 AABB 与腿一起完美旋转,我知道他们不能因为它们是 AABB 但我只是希望位置正确地保持在腿周围)

        //Clear old AABBs           
        obj->ClearSecondaryAABBs();

        glm::mat4 rotMat = obj->GetRotationMatrix();
        glm::vec3 scale = obj->GetScale();

        //Calc min max for each mesh
        for (auto&& mesh : tempObj->GetMeshes())
        {
            glm::vec3 min = mesh.Vertices[0].Position * scale;
            glm::vec3 max = mesh.Vertices[0].Position * scale;
            glm::vec3 v;


            for (size_t i = 0; i < mesh.Vertices.size(); i++)
            {
                v = mesh.Vertices[i].Position * scale;
                v = rotMat * glm::vec4(v, 1);
                CalculateMinMax(v, min, max);
            }

            // create new aabb
            AABB* newBox = new AABB(min, max);

            newBox->min += obj->GetPosition();
            newBox->max += obj->GetPosition();

这里有问题的视频,希望大家看看是怎么回事,主要是看腿的AABB是做什么的 https://www.youtube.com/watch?v=B__1pLnjv7k

是否完全是由于未能旋转初始 min/max 位置造成的?

glm::vec3 min = mesh.Vertices[0].Position * scale;
glm::vec3 max = mesh.Vertices[0].Position * scale;
min = rotMat * glm::vec4(min, 1);
max = rotMat * glm::vec4(max, 1);