位置を表す頂点と、最初の位置にあるオブジェクトが見ているポイントを表す別の頂点から回転行列を返す関数を作成しようとしています。これまでのところ、以下のコードがあります。
const Matrix4 Matrix4::createRotation(const Vertex& pos, const Vertex& lookat)
{
Vector3 vz = lookat - pos;
vz.normalize();
Vector3 vx = Vector3::cross(Vector3( 0, 1, 0 ), vz);
vx.normalize();
Vector3 vy = Vector3::cross(vz, vx);
Matrix4 rotation ( vx.x, vy.x, vz.x, 0,
vx.y, vy.y, vz.y, 0,
vx.z, vy.z, vz.z, 0,
0, 0, 0, 1);
return rotation;
}
現時点では間違った結果が生成されており、回転 Matrix4 変数のコンストラクター内にあると確信しています。
この関数は、カメラのビュー マトリックスを構築するために、逆変換マトリックスと組み合わせて使用されます。
誰かがこれを行う方法を私に説明できますか?