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 一起用于渲染。
除了旋转矩阵是如何形成的,我什么都懂。基本上,它放入归一化向量并转置矩阵,然后以某种方式得出一个旋转矩阵。解释那个数学。