6

現在、OpenGL(With SDL)を使用して、画面の左クリックした場所に立方体を描画し、画面内の右クリックした位置を指すようにしようとしています。

gluUnprojectを使用して、目的の場所に立方体を正常に描画できます-つまり、立方体が配置されている座標はすでにわかっています。

ただし、立方体を新しい場所に向けるのに必要なすべての角度を計算する方法がわかりません。

もちろん、私はまだgluUnprojectを使用して右クリックの座標を見つけていますが、2Dグラフィックスを使用してZ軸を中心に回転する方法しか知りません。

たとえば、以前は、2DでクワッドをZ軸を中心に回転させたい場合(もちろん、これはZ軸がまだ画面を「通過」しているトップダウンビューになります)、次のようにします。

angle = atan2(mouseCoordsY - quadPosY, mouseCoordsX - quadPosX);
glRotatef(angle*180/PI, 0, 0, 1);

私の質問は、これを3Dでどのように行うのかということです。

  • 上記のように各軸の角度を計算する必要がありますか?
  • もしそうなら、X軸とY軸の周りの回転角度をどのように計算しますか?
  • そうでない場合、希望する結果を達成するためにどのような方法を使用する必要がありますか?

どんな助けでも大歓迎です。

4

1 に答える 1

9

キューブがA=(x0、y0、z0)にある場合

キューブが現在B=(x1、y1、z1)を見ている場合

そして、C =(x2、y2、z2)を調べたい場合は、

v1をAからBへのベクトルとします

v1 = B-A

およびv2はAからCまでのものです

v2 = C-A

最初にそれらを正規化します。

v1 = v1 / |v1|
v2 = v2 / |v2|

次に、回転角と回転軸を次のように計算します。

angle = acos(v1*v2) //dot product
axis = v1 X v2 //cross product

glRotateを呼び出すことができます

glRotate(angle, axis[0], axis[1], axis[2])
于 2010-11-10T11:58:08.607 に答える