6

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

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

但是我不知道如何计算使我的立方体指向新位置所需的所有角度。

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

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

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

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

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

任何帮助是极大的赞赏。

4

1 回答 1

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])
于 2010-11-10T11:58:08.607 回答