我使用四元数在3d空间中旋转球体。
球体位于p =(0,0,0)
问题是:如何找到离相机最近的点和/或脸。
答案 0 :(得分:1)
这很简单。球体具有良好的属性,它由所有点的集合形成,距离中心的距离具有一定的值(半径)。
在OpenGL中,我们假设观察者位于原点。通过线性变换(模型视图)将对象放置在它们各自的坐标空间中。因此,我们所要做的就是在球体的局部坐标系中找到观察者的位置,并将向量朝向局部空间观察者位置标准化为单位长度。
转换是完整的模型视图矩阵 MV 。您的四元数 q 可以映射到矩阵 R 。假设 q ,即 R 定义球体在其自身局部框架内的旋转,则朝向视图空间的总转换变为
p_view = MV · R · p_local
其中 p 是球体点的集合。
因此,球体框架参考的局部观察者位于
o_local = inv(MV · R) · (0,0,0,1)
最后,您要将本地帧位置矢量重新缩放到观察者的球体半径
o_direction_on_sphere = radious · o_local / len(o_local)