首页 > 解决方案 > 如何通过围绕相机位置旋转所有点来模拟 3D 空间中的相机旋转?

问题描述

目前我正在使用 Python 开发一个简单的 3D 渲染器(我知道,可能不是最佳选择),我无法弄清楚如何让相机旋转 - 或者更准确地说,我无法弄清楚如何让一个点围绕相机在 3D 空间中的位置。我尝试使用此处描述的使用旋转矩阵的方法,但这似乎只是使点围绕自己旋转。

例如,如果我在一个有立方体的场景中,而不是立方体围绕相机旋转,从而产生相机旋转的错觉,立方体只会围绕自身旋转,所以看起来就像有一个立方体在旋转。

希望这是一个明显的解决方案,如有必要,我可以发布我的代码。

标签: matrixgraphics3dcomputer-science

解决方案


为了围绕空间中的任意点旋转:

  • 首先,将该点转换为原点
  • 然后,绕原点旋转
  • 最后,将原点翻译回原点。

给定旋转点p和旋转矩阵R

def rot_about_point(p, R, x):
  return translate(p) @ R @ translate(-p) @ x

上面的代码假设x是一个列向量(齐次 4 向量),因此矩阵在左侧将它们相乘,并且从右到左读取几何变换。


推荐阅读