问题描述
目前,我正在使用Python开发一个简单的3D渲染器(我知道,可能不是最佳选择),而且我无法弄清楚如何旋转相机-更准确地说,我无法弄清楚如何指出一点在3D空间中围绕相机的位置旋转。我尝试使用here所述的方法,该方法使用旋转矩阵,但是这似乎只是使这些点围绕它们自身旋转。
例如,如果我在一个有立方体的场景中,而不是立方体绕相机旋转,从而造成了相机旋转的错觉,则立方体将围绕自身旋转,因此看起来就像一个立方体旋转。
解决方法
为了绕空间中的任意点旋转:
- 首先,将该点转换为原点
- 然后,绕原点旋转
- 最后,将原点转换回原始点。
给出旋转点p
和旋转矩阵R
:
def rot_about_point(p,R,x):
return translate(p) @ R @ translate(-p) @ x
上面的代码假设x
是列向量(均匀的4向量),因此矩阵在左侧相乘,并且几何变换从右向左读取。