繁体   English   中英

绕任意轴旋转的3D数学

[英]3D math rotating around an arbitrary axis

我正在使用现代的opengl,我需要一些围绕任意轴旋转的帮助。 因此基本上,当我旋转3D模型时,我还需要旋转其碰撞盒。 glm处理模型本身的所有旋转数学,我只需要能够旋转碰撞盒即可。 我试着学习,但是遇到麻烦了,有人可以帮忙吗? https://www.siggraph.org/education/materials/HyperGraph/modeling/mod_tran/3drota.htm

if (model->collision_box->aX.x >= this->collision_box->ax.x && this->collision_box->aX.x > model->collision_box->ax.x){
    if (model->collision_box->aY.y >= this->collision_box->ay.y && this->collision_box->aY.y > model->collision_box->ay.y){
        if (model->collision_box->aZ.z >= this->collision_box->az.z && this->collision_box->aZ.z > model->collision_box->az.z){
            mx = 0;//stop movement
            my = 0;
            mz = 0;
        }
    }
}            

凹凸:将碰撞盒的8个点存储为vec3点,以便可以旋转它们。 不只是最小/最大。 另外,如果我使用凸碰撞盒,我仍然需要绕任意轴旋转!

当你有谁边框的对象被定义为顶点的最小值和最大值,你有什么是A X是一个 ligned ounding盒。 当对象移动或旋转时,此更新如下:

动态AABB

框保持与主轴对齐。 如果与对象一起旋转中,你有一个 bject ligned ounding牛BO,除非对象顶点修改你并不需要更新它的尺寸(或者它的缩放)。

这是AABB与OOBB的示例。

AABB和OOBB

AABB相交效率更高,但是OOBB对于动态对象更易于维护。 对于一阶测试,您还可以使用球形边界体积(旋转不变)。

PS:感谢GIF,取材于此处的视频

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM