Matrix 如何通过围绕摄影机位置旋转所有点来模拟3D空间中的摄影机旋转?

Matrix 如何通过围绕摄影机位置旋转所有点来模拟3D空间中的摄影机旋转?,matrix,graphics,3d,computer-science,Matrix,Graphics,3d,Computer Science,目前,我正在用Python开发一个简单的3D渲染器(我知道,可能不是最好的选择),我不知道如何使摄影机旋转——或者更准确地说,我不知道如何使点围绕摄影机在3D空间中的位置旋转。我尝试过使用描述的方法,使用旋转矩阵,但是这似乎只是使点围绕自己旋转 例如,如果我在一个有立方体的场景中,而不是立方体围绕摄影机旋转,从而产生摄影机旋转的错觉,那么立方体只会围绕自身旋转,因此看起来就像有一个立方体在旋转 希望这是一个显而易见的解决方案,如果需要,我可以发布我的代码。为了绕空间中的任意点旋转: 首先,将该

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

例如,如果我在一个有立方体的场景中,而不是立方体围绕摄影机旋转,从而产生摄影机旋转的错觉,那么立方体只会围绕自身旋转,因此看起来就像有一个立方体在旋转


希望这是一个显而易见的解决方案,如果需要,我可以发布我的代码。

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

  • 首先,将该点转换为原点
  • 然后,围绕原点旋转
  • 最后,将原点转换回原点
给定旋转点
p
,以及旋转矩阵
R

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

上述代码假定
x
是一个列向量(齐次4-向量),因此矩阵在左侧相乘,几何变换从右向左读取。

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

  • 首先,将该点转换为原点
  • 然后,围绕原点旋转
  • 最后,将原点转换回原点
给定旋转点
p
,以及旋转矩阵
R

def rot_about_point(p, R, x):
  return translate(p) @ R @ translate(-p) @ x
上面的代码假设
x
是一个列向量(齐次4-向量),因此矩阵在左侧与它们相乘,几何变换从右向左读取