是否有可能将四元数限制为仅在 x 和 y 轴上移动(例如在欧拉-偏航和俯仰中,没有滚动)?我有什么方程式或类似的东西可以做到这一点吗?
一些例子:
运动应该像这样:http: //360.art.pl/experimental/1/
但是当我在四元数上构建我的播放器时,它没有限制,我不知道如何修复它http://360.art。 pl/实验/2/
让我首先描述一下你所说的约束类型。给定一个world_up向量,您希望限制旋转,使其相对于相机显得垂直。如果相机视图坐标标记为camera_up、camera_right和camera_forward:
constrain rotation matrix R such that: dot(R*world_up, camera_right) == 0
Run Code Online (Sandbox Code Playgroud)
LookAt()这可以通过构造一组垂直坐标向量作为视图方向的函数来直接完成(例如,类似函数) view_forward:
given vectors: view_forward, world_up
Rot_forward = normalize(view_forward)
Rot_right = normalize( cross(view_forward, world_up) )
Rot_up = cross(Rot_right, Rot_forward)
Run Code Online (Sandbox Code Playgroud)
回答这个问题:我可能是错的,但我不认为这种约束可以直接用四元数来实现。如上生成旋转矩阵并将其转换为四元数会更容易。
这确实提出了一个问题:您想通过在这里使用四元数来解决什么问题?
view_forward考虑到约束,插值向量而不是四元数会更自然。