Java 需要帮助理解这个旋转矩阵的数学代码吗
这段代码生成一个世界到摄影机的矩阵,该矩阵将与openGL一起用于渲染Java 需要帮助理解这个旋转矩阵的数学代码吗,java,opengl,graphics,matrix,transformation,Java,Opengl,Graphics,Matrix,Transformation,这段代码生成一个世界到摄影机的矩阵,该矩阵将与openGL一起用于渲染 除了旋转矩阵是如何形成的,我什么都懂。基本上,它把标准化向量和转置矩阵,不知怎的,这就产生了一个旋转矩阵。解释数学。变换矩阵将顶点从一个空间变换到另一个空间。假设初始空间是空间A,最终空间是空间B 空间A和空间B都由A定义。所以空间A有一些基向量和一个原点。然而,如果你想用数字来讨论基向量,你必须讨论它们相对于其他空间的关系。否则,这些数字就没有意义了,因为空间定义了向量中的数字的含义 从空间A到空间B的变换矩阵是空间A相对
除了旋转矩阵是如何形成的,我什么都懂。基本上,它把标准化向量和转置矩阵,不知怎的,这就产生了一个旋转矩阵。解释数学。变换矩阵将顶点从一个空间变换到另一个空间。假设初始空间是空间A,最终空间是空间B 空间A和空间B都由A定义。所以空间A有一些基向量和一个原点。然而,如果你想用数字来讨论基向量,你必须讨论它们相对于其他空间的关系。否则,这些数字就没有意义了,因为空间定义了向量中的数字的含义 从空间A到空间B的变换矩阵是空间A相对于空间B表示的基本向量。变换的第一列是空间A的X轴方向,相对于空间B。第二列是A的Y轴,第三列是A的Z轴 代码所做的是生成相机空间的基向量,相对于给定的世界空间(由给定的三个向量定义)。因此,它构建了一个矩阵,在摄影机空间中获取顶点,并在世界空间中吐出它们
但是,它要生成的矩阵是从世界空间到摄影机空间的变换。因此,它先将矩阵求逆;A-to-B矩阵的逆矩阵是B-to-A矩阵。有趣的事实:纯旋转矩阵的逆矩阵与其转置矩阵相同,这也更容易计算。最好在那里问这个问题。
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);
}