在我的3D应用程序中,我将对象的位置存储在一个向量中,并将其相对于原点的旋转存储在四元数中。我需要将对象围绕具有任意起点的向量旋转。我尝试将位置-向量起点和旋转转换为矩阵,旋转矩阵,然后从结果矩阵中提取位置和旋转作为向量和四元数。位置正确,但旋转保持不变(对象围绕给定向量旋转,但始终面向相同方向)。
我的方法错了还是有bug?
我的方法错了还是有bug?
我不确定为什么您期望旋转发生改变。您有编程“实体”代表原点、目标点和旋转。基于其他两个“实体”计算目标点不应影响它们。
那通常的方法呢?如果您需要围绕点(a, b, c)旋转位置(x, y, z),首先将位置平移,以便旋转将围绕原点进行:使用(x-a, y-b, z-c)作为位置,像平常一样围绕原点旋转以获得新的平移后位置(x'-a, y'-b, z'-c),并且平移回去并获取您的新位置(x', y', z')。
我对四元数不是很熟悉,也许这完全与主题无关,但你不能围绕一个点旋转3D对象,旋转轴必须是一条线。