Bentley中的坐标系理解
本节主要阐述 Bentley 平台的坐标系系统。
模型变换概念
在进行模型变换过程中,有时候对模型与坐标系理解不通透,会导致变换过程变得很艰辛,因此将其关键概念总结如下:
所有的模型都是存储在全局世界坐标系下的
我们在视图中观察到的模型,是程序将原模型左乘一个视图旋转矩阵,然后左乘一个投影矩阵投影到屏幕上产生的
当将一个模型变换到局部坐标系后,再
AddToModel
,最后在世界坐标系中显示出来的模型就是局部坐标系的样子。引擎推动的不是飞船而是宇宙。飞船压根就没动过。
引擎代表坐标系,图形中,坐标系只有一个世界坐标系,其它的局部坐标系是为了方便理解而产生出来的。坐标系的变换就是对模型的变换。
所以在理解第 3 条时,不能理解成将局部坐标系与世界坐标系对齐,而应理解成将世界坐标系与局部坐标系对齐(换言之,就是对模型进行仿射变换)
变换完成后,在视图中显示的就是局部坐标系下的状态了
世界坐标系
模型中,所有点的坐标都是依赖于世界坐标系的。
视图坐标系
视图坐标系遵循右手定则,其中 Z 轴朝向屏幕外,X 轴水平向右,Y 轴竖直向上。
因此,要获取垂直于屏幕的向量(在世界坐标系下的表达),可以通过如下步骤获取:
- 获取视图的旋转矩阵 \(R\)
- 对旋转矩阵求逆 \(R^{-1}\)
- 然后将点 \(V_{local}\)(0,0,1)应用 \(R^{-1}\) 变换
因为 \(V_{local} = R \cdot V_{world}\)
所以 \(R^{-1} \cdot V_{local} = V_{wold}\)
任意坐标系
任意坐标系的度量矩阵是通过对单位矩阵的旋转平移后得到的。可以通过
DTranform3d
中的一些静态方法生成。
如果想将任意坐标系下的元素变换到世界坐标系中,需要左乘度量矩阵的逆。