坐标系 (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 成员的符号。
若要获取右侧世界的数量,请使用 D3DXMatrixPerspectiveRH 和 D3DXMatrixOrthoRH 函数来定义投影转换。 但是,请小心使用相应的 D3DXMatrixLookAtRH 函数,反转后脸剔除顺序,并相应地布局多维数据集映射。
虽然左手坐标和右手坐标是最常见的系统,但 3D 软件中使用了多种其他坐标系。 例如,3D 建模应用程序使用坐标系统,其中 y 轴指向或远离查看器,z 轴指向上。
正式而言,可以通过计算由特定基向量集定义的矩阵的确定性来找到一组基向量(即坐标系统)。 如果确定因素是积极的,则基础据说是“积极”的(或右撇子)。 如果确定因素为负数,则表示基数为“负”(或左撇子)。 有关确定因素的说明,请参阅任何线性代数资源。
非正式地,可以使用“右/左手规则”来确定给定的基础向量集是否形成右手或左手坐标系。
对 3D 坐标系中定义的对象执行的基本作是转换、旋转和缩放。 可以合并这些基本转换来创建转换矩阵。 有关详细信息,请参阅 转换(Direct3D 9)。
合并这些作时,结果不是通勤的;乘矩阵的顺序很重要。
相关主题