如何在计算机图形学中用4x4矩阵实现相机绕世界原点旋转?
相机旋转与坐标系转换问题
初始配置
我拥有初始旋转矩阵:
glm::mat3 rotationMatrix( -1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, -1.0 );
以及初始相机位置:
glm::vec3 cameraPosition({0.0, 0.0, 2.0});
世界到相机坐标系的转换逻辑
将世界坐标系中的点(worldVertex)转换到相机坐标系时,我按如下方式构建转换矩阵:
glm::mat4 cameraToWorld = glm::mat4( rotationMatrix[0][0], rotationMatrix[0][1], rotationMatrix[0][2], cameraPosition.x, rotationMatrix[1][0], rotationMatrix[1][1], rotationMatrix[1][2], cameraPosition.y, rotationMatrix[2][0], rotationMatrix[2][1], rotationMatrix[2][2], cameraPosition.z, 0.0, 0.0, 0.0, 1.0 ); glm::mat4 worldToCamera = glm::inverse(cameraToWorld); glm::vec4 newWorldVertex(worldVertex.x, worldVertex.y, worldVertex.z, 1.0); glm::vec4 cameraPoint = newWorldVertex * worldToCamera; // 从cameraPoint中提取转换后的x、y、z坐标
当前遇到的问题
我需要实现相机绕世界原点旋转视角的功能,比如绕X轴逆时针旋转90度。我已经构建了额外的旋转矩阵:
additionalRotationMatrix = glm::mat3( 1.0, 0.0, 0.0, 0.0, cos(90), sin(90), 0.0, -sin(90), cos(90) );
但不清楚后续如何操作。我尝试过将该矩阵与现有rotationMatrix相乘来更新旋转矩阵,也尝试过用它乘以w分量为1的相机位置vec4,但都没有得到预期结果。
补充说明:转换点之后我会获取2D平面交点用于绘制,平移操作可通过加减cameraPosition向量的对应维度实现,且我始终按值传递rotationMatrix和cameraPosition。
内容的提问来源于stack exchange,提问作者J P
相关产品推荐
相关产品推荐

