将对象旋转到 3D 点

Rotate object towards 3D point

我正在尝试使用 OpenGL 和 glm 将对象旋转到 3d 点。为了找到 xRotation,我正在这样做:

xRotation=atan2(lookAtDiff.x,lookAtDiff.z)

其中 xRotation 是围绕 Y 轴的,而 lookAtDiff 是一个 vec3,它是对象位置与我试图使其面向的对象之间的差异。这完美无缺。所以我决定以相同的方式执行 yRotation(绕 X 轴旋转):

yRotation=atan2(lookAtDiff.y,lookAtDiff.x)

这给了我错误的旋转。我的问题是为什么我从中得到错误的轮换,我该如何解决?

你必须使用对角线:

yRotation = atan2(lookAtDiff.y, sqrt(lookAtDiff.x * lookAtDiff.x + lookAtDiff.z * lookAtDiff.z));