在没有矩阵的情况下旋转3D矢量(OpenGL)

时间:2013-12-24 10:26:33

标签: opengl vector matrix rotation degrees

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

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);

3 个答案:

答案 0 :(得分:2)

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

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

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

假设您想围绕phi轴旋转z度。您希望该点的长度为r,但角度为theta + phi。它的坐标是:

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

通过使用y替换上述计算中的每个y,可以类似地围绕z轴进行旋转。

答案 1 :(得分:1)

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

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

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

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

如果改变X和Y,你将围绕Z轴旋转,即X-Y平面。

答案 2 :(得分:0)

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