private Mat4 calcLookAtMatrix(Vec3 cameraPt, Vec3 lookPt, Vec3 upPt) {
Vec3 lookDir = Glm.normalize(Vec3.sub(lookPt, cameraPt));
Vec3 upDir = Glm.normalize(upPt);
Vec3 rightDir = Glm.normalize(Glm.cross(lookDir, upDir));
Vec3 perpUpDir = Glm.cross(rightDir, lookDir);
Mat4 rotMat = new Mat4(1.0f);
rotMat.setColumn(0, new Vec4(rightDir, 0.0f));
rotMat.setColumn(1, new Vec4(perpUpDir, 0.0f));
rotMat.setColumn(2, new Vec4(Vec3.negate(lookDir), 0.0f));
rotMat = Glm.transpose(rotMat);
Mat4 transMat = new Mat4(1.0f);
transMat.setColumn(3, new Vec4(Vec3.negate(cameraPt), 1.0f));
return rotMat.mul(transMat);
}
このコードは、レンダリングのためにopenGLで使用されるワールドからカメラへのマトリックスを生成します。
回転行列がどのように形成されるかを除いて、私はすべてを理解しています。基本的には、正規化されたベクトルを入れて行列を転置しますが、どういうわけかそれは回転行列で出てきます。その数学を説明してください。