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