math - 如何将世界坐标转换为相机坐标?

标签 math opengl 3d

我有一个输入 3D 矢量,以及相机的俯仰和偏航。任何人都可以描述或提供资源链接来帮助我理解和实现所需的转换和矩阵映射吗?

最佳答案

世界到相机的变换矩阵是相机到世界矩阵的逆矩阵。相机到世界矩阵是相机位置的平移和相机方向的旋转的组合。因此,如果 M 是对应于相机方向的 3x3 旋转矩阵,t 是相机位置,则 4x4 相机到世界矩阵为:

M00 M01 M02 tx
M10 M11 M12 ty
M20 M21 M22 tz
0   0  0   1

请注意,我假设向量是列向量,它们在右侧相乘以执行转换。如果您使用相反的约定,请确保转置矩阵。

要查找M,您可以使用 Wikipedia 上列出的公式之一,具体取决于您对横滚、俯仰和偏航的特定约定。请记住,这些公式使用向量是在左侧相乘的行向量的约定。

一种更有效(且数值稳定)的替代方案是直接计算世界到相机矩阵,而不是计算相机到世界矩阵并对其求逆。为此,只需反转相机的位置(通过否定所有 3 个坐标)及其方向(通过否定滚动角、俯仰角和偏航角,并将它们调整到适当的范围内),然后使用相同的方法计算矩阵算法。

关于math - 如何将世界坐标转换为相机坐标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/695043/

相关文章:

c++ - 在 opengl 中动画由立方体制成的模型

opengl - 数百万个原语的哪种鼠标采摘策略?

css - 精确测量的解释 css 3d 立方体

math - Vim 将一列数字乘以一系列数字

python - 如何在给定素数但指数未知的情况下生成数字?

javascript - 解决循环组合程序问题的程序

android - android 上函数的图形库

opengl - 如果使用gluPerspective(),如何知道平截头体的边界?

3D 多项式回归

python - 线段和三角形之间的 3d 交集