【问题标题】:How would I simulate camera rotation in 3D space by rotating all the points around the position of the camera?如何通过围绕相机位置旋转所有点来模拟 3D 空间中的相机旋转?
【发布时间】:2020-10-24 16:30:12
【问题描述】:
目前我正在使用 Python 开发一个简单的 3D 渲染器(我知道,这可能不是最佳选择),我无法弄清楚如何让相机旋转 - 或者更准确地说,我无法弄清楚如何提出观点围绕相机在 3D 空间中的位置旋转。我尝试使用here 描述的方法,它使用旋转矩阵,但这似乎只是让点围绕自己旋转。
例如,如果我在一个带有立方体的场景中,而不是立方体围绕摄像机旋转,从而产生摄像机旋转的错觉,立方体只会围绕自身旋转,所以看起来就像有一个立方体旋转。
希望这是一个显而易见的解决方案,如有必要,我可以发布我的代码。
【问题讨论】:
标签:
matrix
graphics
3d
computer-science
【解决方案1】:
为了围绕空间中的任意点旋转:
- 首先,将该点转换为原点
- 然后,绕原点旋转
- 最后,将原点翻译回原点。
给定旋转点p,旋转矩阵R:
def rot_about_point(p, R, x):
return translate(p) @ R @ translate(-p) @ x
上面的代码假设x是一个列向量(齐次4-向量),所以矩阵在左边将它们相乘,几何变换从右到左读取。