我想围绕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);
答案 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}; ?