私は3D環境に宇宙船を持っています。コントロールポイントを使用してBスプライン曲線を描画しました(描画できるようにベジェ曲線に変換されました)。ドローイベントが呼び出されるたびに、船はポイント(0,0,0)にあり、カーブ上の次の座標に変換されます。さて、この変換を行う前に、船の向きがそのポイントでのカーブの接線に沿っているように回転させる必要があります。
これを行うことで、現在のポイントに近いカーブ上のポイントを見つけることで、接線を概算できます。私はC++でOpenGLを使用しています
float mDifference[1][3] = {nearPoint[0][0] - currentPosition[0][0],
nearPoint[0][1] - currentPosition[0][1],
nearPoint[0][2] - currentPosition[0][2]};
float norm = sqrt(mDifference[0][0] * mDifference[0][0]
+ mDifference[0][1] * mDifference[0][1]
+ mDifference[0][2] * mDifference[0][2]);
float tangent[1][3] = { mDifference[0][0] / norm,
mDifference[0][1] / norm,
mDifference[0][2] / norm};
//tangent = rotationVector?
spacecraftTransformGroup->setRotationVector(tangent[0][0],tangent[0][1],tangent[0][2]);
回転ベクトルは接線だと思いますが、船を回転させるのに必要な角度がわかりません。船を回転させて接線に合わせるにはどうすればよいですか?