Direct3D 9 (向量、頂點和四元數)
在整個 Direct3D 中,頂點描述位置及方向。 原始物件中的每個頂點都由給予它位置、色彩、紋理座標的向量,以及給予它方向的標準向量所述。
四元數會將第四個元素新增至 [x, y, z] 值,以定義三個元件向量。 四元數是通常用於 3D 旋轉之矩陣方法的替代方法。 四元數代表 3D 空間中的軸以及圍繞該軸的旋轉。 例如,四元數可能表示 (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 公用程式程式庫所提供的 數學函 式包含許多使用雙元件和四個元件向量簡化工作的額外函式。
相關主題