3

我开始混淆数学。

我想做一个旋转,将 y 轴的方向转换为给定的方向。

所以我想做一个有输入方向的函数,并调用glRotatef()。在函数之后,我绘制的任何东西都应该指向给定的方向而不是向上。

glRotatef 有 4 个参数:角度、x、y、z

4

1 回答 1

2

基本上,您希望将世界y轴与(单位长度)方向对齐d。为了用 glRotatef 组成一个旋转矩阵,你需要一个 axisa = [a_x, a_y, a_z]和一个 angle omega

y取入的旋转轴d垂直于yd,因此可以通过向量叉积计算:

a = cross(y, d);

旋转角度omega只是向量y和之间的角度d,因此可以从点积计算:

omega = acos(dot(y, d));

现在您可以使用以下方法构建旋转矩阵:

glRotatef(omega, a_x, a_y, a_z);

请注意,omega需要以度为单位,而不是弧度。还要检查旋转方向。

于 2012-12-01T19:31:58.827 回答