首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >旋转对象AABB更新不正确

旋转对象AABB更新不正确
EN

Stack Overflow用户
提问于 2019-08-19 12:35:29
回答 1查看 47关注 0票数 1

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

让我们假设下面的代码被称为每一帧,是否有可能让这些AABB正确跟随。(我不是要求AABB完美地随着腿旋转,我知道它们不能,因为它们是AABB,但我只想让位置正确地停留在腿周围)

代码语言:javascript
复制
        //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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-19 12:45:14

这是不是因为未能旋转初始的最小/最大位置而导致的?

代码语言:javascript
复制
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);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57550535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档