矢量、顶点和四元数(Direct3D 9)
在整个 Direct3D 中,顶点描述位置和方向。 基元中的每个顶点都由一个向量描述,该矢量提供其位置、颜色、纹理坐标和提供其方向的普通向量。
四元数将第四个元素添加到定义三分量向量的 [x, y, z] 值。 四元数是矩阵方法的替代方法,通常用于三维旋转。 四元数表示三维空间中的轴,以及围绕该轴的旋转。 例如,四元数可能表示 (1,1,2) 轴和 1 弧度旋转。 四元数携带有价值的信息,但它们的真正力量来自可以对其执行的两个作:合成和内插。
对四元数执行合成类似于组合它们。 两个四元数的组成如下图所示。
四元数表示法插图
应用于几何图形的两个四元数的构成意味着“通过旋转ー围绕轴旋转几何图形,然后通过旋转₁围绕轴旋转它”。在这种情况下,Q 表示围绕单个轴的旋转,这是应用 qー 的结果,然后 q₁ 到几何图形。
使用四元数内插,应用程序可以计算从一个轴和方向到另一个轴的平滑合理路径。 因此,q₁ 和 qー 之间的内插提供了一种从一个方向到另一个方向的动画的简单方法。
在组合和内插一起使用时,它们为你提供了一种简单的方式来作几何图形,使其看起来很复杂。 例如,假设你有一个要旋转到给定方向的几何图形。 你知道你想要围绕轴 ₁ 轴旋转 rー 度,然后围绕轴旋转 r₁ 度,但不知道最终四元数。 通过使用合成,可以将几何图形上的两个旋转组合在一起,以获取结果的单个四元数。 然后,你可以从原始项内插到组合四元数,以实现从一个到另一个的平滑转换。
D3DX 实用工具库包含有助于处理四元数的函数。 例如,D3DXQuaternionRotationAxis 函数向定义旋转轴的向量添加旋转值,并在由 D3DXQUATERNION 结构定义的四元数中返回结果。 此外,D3DXQuaternionMultiply 函数构成四元数,D3DXQuaternionSlerp 在两个四元数之间执行球面线性内插。
Direct3D 应用程序可以使用以下函数来简化使用四元数的任务。
- D3DXQuaternionBaryCentric
- D3DXQuaternionConjugate
- D3DXQuaternionDot
- D3DXQuaternionExp
- D3DXQuaternionIdentity
- D3DXQuaternionInverse
- D3DXQuaternionIsIdentity
- D3DXQuaternionLength
- D3DXQuaternionLengthSq
- D3DXQuaternionLn
- D3DXQuaternionMultiply
- D3DXQuaternionNormalize
- D3DXQuaternionRotationAxis
- D3DXQuaternionRotationMatrix
- D3DXQuaternionRotationYawPitchRoll
- D3DXQuaternionSlerp
- D3DXQuaternionSquad
- D3DXQuaternionToAxisAngle
Direct3D 应用程序可以使用以下函数来简化使用三分量向量的任务。
- D3DXVec3Add
- D3DXVec3BaryCentric
- D3DXVec3CatmullRom
- D3DXVec3Cross
- D3DXVec3Dot
- D3DXVec3Hermite
- D3DXVec3Length
- D3DXVec3LengthSq
- D3DXVec3Lerp
- D3DXVec3Maximize
- D3DXVec3Minimize
- D3DXVec3Normalize
- D3DXVec3Project
- D3DXVec3Scale
- D3DXVec3Subtract
- D3DXVec3Transform
- D3DXVec3TransformCoord
- D3DXVec3TransformNormal
- D3DXVec3Unproject
D3DX 实用工具库提供的 数学函数 包含许多使用双分量和四分量矢量简化任务的其他函数。
相关主题