You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在计算机图形学中用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 10:05:24