0

我使用四元数在 3d 空间中旋转球体。

球体放置在 p = (0, 0, 0)

问题是:我如何找到离相机最近的点和/或脸。

4

1 回答 1

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)
于 2013-06-11T12:02:01.213 回答