在3D中查找X,Y和Z轴的角度 - OpenGL / C ++

时间:2010-11-10 10:04:27

标签: c++ opengl 3d rotation angle

我目前正在尝试使用OpenGL(使用SDL)将立方体绘制到我在屏幕上单击的位置,然后让它指向屏幕中我右键单击的位置。

我可以使用gluUnproject在我想要的位置成功绘制一个立方体 - 意思是我已经知道了我的立方体所在的坐标。

但是我不知道如何计算在新位置制作立方体点所需的所有角度。

当然我仍在使用gluUnproject来查找右键单击的坐标,但我只知道如何使用2D图形围绕Z轴旋转。

例如之前,如果我想围绕Z轴旋转一个四边形(当然,这将是一个自上而下的视图,其中Z轴仍在“通过”屏幕)在2D中我会做类似的事情:

angle = atan2(mouseCoordsY - quadPosY, mouseCoordsX - quadPosX);
glRotatef(angle*180/PI, 0, 0, 1);

我的问题是,我将如何在3D中进行此操作?

  • 我是否需要像上面那样计算每个轴的角度?
  • 如果是这样,我如何计算绕X轴和Y轴旋转的角度?
  • 如果没有,我应该用什么方法来达到我想要的效果?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:9)

如果您的立方体位于A =(x0,y0,z0)

如果您的立方体当前正在查看B =(x1,y1,z1)

如果你想看它C =(x2,y2,z2)那么;

让v1成为从A到B的向量

v1 = B - A

和v2是从A到C的那个

v2 = C - A

首先将它们标准化。

v1 = v1 / |v1|
v2 = v2 / |v2|

然后计算旋转角度和旋转轴

angle = acos(v1*v2) //dot product
axis = v1 X v2 //cross product

您可以使用

调用glRotate
glRotate(angle, axis[0], axis[1], axis[2])