Bentley中的坐标系理解

本节主要阐述 Bentley 平台的坐标系系统。

模型变换概念

在进行模型变换过程中,有时候对模型与坐标系理解不通透,会导致变换过程变得很艰辛,因此将其关键概念总结如下:

  1. 所有的模型都是存储在全局世界坐标系下的

  2. 我们在视图中观察到的模型,是程序将原模型左乘一个视图旋转矩阵,然后左乘一个投影矩阵投影到屏幕上产生的

  3. 当将一个模型变换到局部坐标系后,再 AddToModel,最后在世界坐标系中显示出来的模型就是局部坐标系的样子。

  4. 引擎推动的不是飞船而是宇宙。飞船压根就没动过。

    引擎代表坐标系,图形中,坐标系只有一个世界坐标系,其它的局部坐标系是为了方便理解而产生出来的。坐标系的变换就是对模型的变换。

    所以在理解第 3 条时,不能理解成将局部坐标系与世界坐标系对齐,而应理解成将世界坐标系与局部坐标系对齐(换言之,就是对模型进行仿射变换)

    变换完成后,在视图中显示的就是局部坐标系下的状态了

世界坐标系

模型中,所有点的坐标都是依赖于世界坐标系的。

视图坐标系

视图坐标系遵循右手定则,其中 Z 轴朝向屏幕外,X 轴水平向右,Y 轴竖直向上。

因此,要获取垂直于屏幕的向量(在世界坐标系下的表达),可以通过如下步骤获取:

  1. 获取视图的旋转矩阵 \(R\)
  2. 对旋转矩阵求逆 \(R^{-1}\)
  3. 然后将点 \(V_{local}\)(0,0,1)应用 \(R^{-1}\) 变换

因为 \(V_{local} = R \cdot V_{world}\)

所以 \(R^{-1} \cdot V_{local} = V_{wold}\)

任意坐标系

任意坐标系的度量矩阵是通过对单位矩阵的旋转平移后得到的。可以通过 DTranform3d 中的一些静态方法生成。

如果想将任意坐标系下的元素变换到世界坐标系中,需要左乘度量矩阵的逆。