私は数学を混乱させ始めています。
y 軸の方向を特定の方向に変換する回転を作成したいと考えています。
そこで、入力の方向を持ち、glRotatef() を呼び出す関数を作成したいと考えています。関数の後、私が描くものはすべて、上向きではなく指定された方向を指す必要があります。
glRotatef には、角度、x、y、z の 4 つのパラメーターがあります。
基本的に、ワールドy
軸を (単位長さの) 方向に合わせd
ます。glRotatef で回転行列を構成するには、 axisa = [a_x, a_y, a_z]
と angleが必要omega
です。
の回転軸はとの両方に垂直y
であるため、ベクトルの外積を介して計算できます。d
y
d
a = cross(y, d);
回転角omega
は単純にベクトルy
との間の角度d
なので、内積から計算できます。
omega = acos(dot(y, d));
これで、次を使用して回転行列を構築できます。
glRotatef(omega, a_x, a_y, a_z);
omega
ラジアンではなく度である必要があることに注意してください。回転方向も確認してください。