我有一個繪製在(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