私のopenglアプリでは、カメラを見るようにフィギュアの向きを変えたいと思っています。これを行うには、すべてのオブジェクトに対して2つのベクトルを前と上に定義します。
gluLookAt を使用してカメラを制御しているので、必要なベクトル newFront と newUp は簡単にわかります。
各図の向きを制御するために使用するコードは次のとおりです。
m4D orientate(v3D newFront, v3D newUp)
{
double angle = angle_between(front, newFront);
v3D cross = normalize(cross_product(front, newFront));
m4D matrix = rotate_from_axis(angle, cross);
up = normalize(up * matrix);
angle = angle_between(up, newUp);
cross = normalize(cross_product(up, newUp));
return(rotate_from_axis(angle, cross) * matrix);
}
このコードは、マトリックス スタックにこのマトリックスしかない場合にうまく機能しますが、以前のマトリックスの回転 (もちろん、フロントとアップのベクトルの回転) をプッシュすると失敗します。
私のせい?