我正在构建一个增强现实应用程序,我有相机的偏航,俯仰和滚动。我想开始在3D环境中放置对象。我希望这样做,以便当用户点击时,在相机指向的位置(2D屏幕的中心)处弹出3D点,并且当用户移动时,该点在3D空间中相应地移动。相机不会改变位置,只改变方向。有没有一种正确的方法来恢复这一点的3D位置?我们可以假设所有点都与摄像机位置等距。
我能够独立完成两个轴(OpenGL默认方向)。这适用于垂直轴的变化:
x = -sin(pitch)
y = cos(pitch)
z = 0
这也适用于横轴的变化:
x = 0
y = -sin(yaw)
z = cos(yaw)
我在想我应该合并到:
x = -sin(pitch)
y = sin(yaw) * cos(pitch)
z = cos(yaw)
这似乎很接近,但并不完全正确。任何建议将不胜感激!
答案 0 :(得分:1)
听起来你只想将旋转矢量(俯仰,偏航,滚动)转换为旋转矩阵。转换可以在Wikipedia article on rotation matrices上看到。这个想法是,一旦你构建了矩阵,就可以简单地转换任何一点。
final_pos = rot_mat*initial_pose
其中最终和初始姿势是3x1向量,rot_mat是3x3矩阵。