坐标系 (Direct3D 9)

通常,3D 图形应用程序使用两种类型的笛卡尔坐标系:左手坐标系和右手坐标系。 在这两个坐标系统中,正 x 轴指向右侧,正 y 轴指向上方。 通过将你的左手或右手手指指向正 x 方向,然后弯曲手指,将其指向正 y 方向,你可以记住正 z 轴指向的方向。 你的拇指指向的方向(无论指向你还是相反方向)就是正 z 轴为坐标系统所指的方向。 下面的图例显示了这两个坐标系统。

左手和右手笛卡尔坐标系统图例

Direct3D 使用左手坐标系统。 如果要移植基于右手坐标系的应用程序,则必须对传递到 Direct3D 的数据进行两次更改。

  • 调换三角形顶点的顺序以便系统从前面按顺时针方向遍历它们。 换言之,如果顶点是 v0、v1、v2,则以 v0、v2、v1 将它们传递到 Direct3D。
  • 使用视图矩阵在 z 方向将世界空间缩放 -1。 为此,请翻转用于视图矩阵的 D3DMATRIX 结构的 _31、_32、_33 和 _34 成员的符号。

若要获取相当于右手世界的内容,请使用 D3DXMatrixPerspectiveRHD3DXMatrixOrthoRH 函数来定义投影转换。 但是,请小心使用相应的 D3DXMatrixLookAtRH 函数,反转背面剔除顺序,并相应地布局多维数据集映射。

尽管左手和右手坐标是最常用的系统,但是 3D 软件中还会使用多种其他坐标系统。 例如,3D 建模应用程序使用坐标系统并不少见,其中,y 轴指向查看器或相反方向,且 z 轴指向上方。

从形式上讲,一组基向量的方向 (即坐标系) 可以通过计算由特定基向量集定义的矩阵的行列因素来找到。 如果决定因素为正数,则基数称为“积极”导向 (或右撇子) 。 如果行列因素为负数,则基数 (或左手) 为“负”方向。 有关什么是行列式的说明,请参阅任何线性代数资源。

非正式地,可以使用“右/左手规则”来确定给定的一组基向量是构成右手坐标系还是左手坐标系。

对 3D 坐标系中定义的对象执行的基本操作是平移、旋转和缩放。 你可以组合这些基本转换以创建转换矩阵。 有关详细信息,请参阅 转换 (Direct3D 9)

组合这些操作时,结果不可交换;你乘以矩阵的顺序很重要。

坐标系和几何图形