matrix - 如何通过围绕相机位置旋转所有点来模拟 3D 空间中的相机旋转?
问题描述
目前我正在使用 Python 开发一个简单的 3D 渲染器(我知道,可能不是最佳选择),我无法弄清楚如何让相机旋转 - 或者更准确地说,我无法弄清楚如何让一个点围绕相机在 3D 空间中的位置。我尝试使用此处描述的使用旋转矩阵的方法,但这似乎只是使点围绕自己旋转。
例如,如果我在一个有立方体的场景中,而不是立方体围绕相机旋转,从而产生相机旋转的错觉,立方体只会围绕自身旋转,所以看起来就像有一个立方体在旋转。
希望这是一个明显的解决方案,如有必要,我可以发布我的代码。
解决方案
为了围绕空间中的任意点旋转:
- 首先,将该点转换为原点
- 然后,绕原点旋转
- 最后,将原点翻译回原点。
给定旋转点p
和旋转矩阵R
:
def rot_about_point(p, R, x):
return translate(p) @ R @ translate(-p) @ x
上面的代码假设x
是一个列向量(齐次 4 向量),因此矩阵在左侧将它们相乘,并且从右到左读取几何变换。
推荐阅读
- c - 将网络顺序中的无符号字节数组直接写入ip.ip_dest是否安全?
- javascript - 如何同时调用两个不同的 REST api 端点并在我的应用程序的一个端点上显示来自这两个端点的数据?
- teamcity - 从更改分支名称
掌握 - c# - 当活动不知道会员资格时,活动价格可享受会员折扣
- c# - 如何实现第一人称相机视图?
- python - 参数化 Cassandra 驱动程序表名称
- javascript - Firebase 不写
- python - 两个烧瓶应用程序如何访问同一个数据库
- windows - 显示文件所有属性的 Windows 命令
- sql - 为什么带有 LIMIT 的横向连接会增加执行时间?