我有一个绘制在(0,0,0)的对象,并且对象的方向是(0,0,1)。我试图旋转它以便与矢量对齐,比如vi =(vx,vy,vz)。OpenGL对象旋转
我所做的是以下几点:
v = (0, 0, 1);
v_normal = (vnx, vny, vnz);
跨产品,以获得正常的向量:
v_normal = v.cross(vi);
由于法线,我计算了角度
thetax = arccos(vnx/length(v_normal))
thetay = arccos(vny/length(v_normal))
thetaz = arccos(vnz/length(v_normal))
和然后我做旋转:
glRotatedf(thetax, 1, 0, 0)
glRotatedf(thetay, 0, 1, 0)
glRotatedf(thetaz, 0, 0, 1).
这样做后,我有一些奇怪的。任何人都可以解释如何在交叉产品之后获得旋转角度?谢谢!
“*对象的方向是(0,0,1)*”这是什么意思?另外,为什么你需要3个角度?为什么不只是角度/轴旋转指向你想要指向的位置? –
假设对象是一个箭头,它指向(0,0,1)。我能想到的另一种方法是计算thetax = arctan(sqrt(y^2 + z^2)/ x)和thetay = arctan(z/y)。然后做glRotatedf(thetax,1,0,0)和glRotatedf(thetay,0,1,0)。我不知道这是否有效。请给一些帮助。非常感谢。 – user3204065