2

我想围绕 X 和 Y 轴旋转 Vector(0, -10, 0) 。我想旋转 XrotX度(0 - 360°)和 YrotY度(0 - 180°)。我尝试了很多,但我无法完成它。有人可以给我一个解决方案吗?我尝试过的一些代码:

LightRotX = -posX;
LightRotY = -10 * cos((rotY) * PI / 180.0) - posZ * sin((rotY) * PI / 180.0);
LightRotZ = -10 * sin((rotY) * PI / 180.0) + posZ * cos((rotY) * PI / 180.0);

float bZ = LightRotZ;
float bX = LightRotX;

LightRotX = bZ * sin((rotX) * PI / 180.0) + bX * cos((rotX) * PI / 180.0);
LightRotZ = bZ * cos((rotX) * PI / 180.0) - bX * sin((rotX) * PI / 180.0);
4

3 回答 3

3

(x,y,z)要围绕轴旋转该点z,可以执行以下操作:

首先,请注意z坐标将保持不变。因此,问题归结为(x,y)围绕原点旋转平面中的点。让是与通常定义theta的轴的角度, 让 是平面中向量的长度。这些可以计算为:xr(x,y)

  • r = sqrt(x*x + y*y)
  • theta = atan(y/x)

假设您想phiz轴旋转角度。您希望该点具有长度r但角度theta + phi。它的坐标是:

  • (r * cos(theta + phi), r * sin(theta + phi))

通过将上述计算中的yevery 替换为 a ,可以类似地完成绕轴旋转。yz

于 2013-12-24T18:16:30.567 回答
1

如果您想围绕 y 轴旋转一个点 (x,y,z),那么如果您不想使用矩阵,则需要执行以下操作。考虑平面而不是轴。对于 y 的情况,选择的平面将是 xz 平面。想象在 xz 平面上画一个圆,当你绕 y 轴旋转这个点时,它的位置可以定义为在 xz 平面上画的圆上的一点 P(x,z)。

因此,为了绕 y 轴旋转,您需要更改矢量/点的 x 和 z 坐标。旋转 90 度:

NewX=cos(pi/2)*r
NewZ=sin(pi/2)*r

我不能保证上面两行伪代码的正确性,但是如果你明白了,你就可以实现它。

如果更改 X 和 Y,您将围绕 Z 轴旋转,即 XY 平面。

于 2013-12-24T18:08:32.200 回答
0

您的问题不是很清楚...您是否尝试过 glRotatef(angle, x_axis, y_axis, z_axis) where x_axis, y_axis, z_axis = {1.0, 0.0}; ?

于 2013-12-24T10:31:02.493 回答