Vektorer, hörn och quaternions (Direct3D 9)
I Direct3D beskriver hörn position och orientering. Varje hörn i en primitiv beskrivs av en vektor som ger sin position, färg, strukturkoordinater och en normal vektor som ger sin orientering.
Quaternions lägger till ett fjärde element i värdena [x, y, z] som definierar en trekomponentsvektor. Quaternions är ett alternativ till de matrismetoder som vanligtvis används för 3D-rotationer. En quaternion representerar en axel i 3D-utrymme och en rotation runt den axeln. En quaternion kan till exempel representera en (1,1,2) axel och en rotation på 1 radian. Quaternions bär värdefull information, men deras verkliga kraft kommer från de två åtgärder som du kan utföra på dem: sammansättning och interpolation.
Att utföra komposition på quaternions liknar att kombinera dem. Sammansättningen av två quaternions noteras som följande bild.
Sammansättningen av två quaternions som appliceras på en geometri betyder "rotera geometrin runt axeln₂ genom rotation₂ och rotera den sedan runt axeln₁ genom rotation₁." I det här fallet representerar Q en rotation runt en enda axel som är resultatet av att tillämpa q₂ och sedan q₁ på geometrin.
Med quaternioninterpolation kan ett program beräkna en smidig och rimlig sökväg från en axel och orientering till en annan. Därför ger interpolering mellan q₁ och q₂ ett enkelt sätt att animera från en orientering till en annan.
När du använder sammansättning och interpolering tillsammans ger de dig ett enkelt sätt att manipulera en geometri på ett sätt som verkar komplext. Anta till exempel att du har en geometri som du vill rotera till en viss orientering. Du vet att du vill rotera den r₂ grader runt axeln₂ och sedan rotera den r₁ grader runt axeln₁, men du vet inte den slutliga quaternion. Genom att använda komposition kan du kombinera de två rotationerna på geometrin för att få en enda quaternion som är resultatet. Sedan kan du interpolera från originalet till den sammansatta quaternion för att uppnå en smidig övergång från en till en annan.
D3DX-verktygsbiblioteket innehåller funktioner som hjälper dig att arbeta med quaternions. Funktionen D3DXQuaternionRotationAxis lägger till ett rotationsvärde till en vektor som definierar en rotationsaxel och returnerar resultatet i en quaternion som definieras av en D3DXQUATERNION struktur. Dessutom komponerar funktionen D3DXQuaternionMultiply quaternions och D3DXQuaternionSlerp utför sfärisk linjär interpolation mellan två quaternions.
Direct3D-program kan använda följande funktioner för att förenkla uppgiften att arbeta med quaternions.
- D3DXQuaternionBaryCentric
- D3DXQuaternionConjugate
- D3DXQuaternionDot
- D3DXQuaternionExp
- D3DXQuaternionIdentity
- D3DXQuaternionInverse
- D3DXQuaternionIsIdentity
- D3DXQuaternionLength
- D3DXQuaternionLengthSq
- D3DXQuaternionLn
- D3DXQuaternionMultiply
- D3DXQuaternionNormalize
- D3DXQuaternionRotationAxis
- D3DXQuaternionRotationMatrix
- D3DXQuaternionRotationYawPitchRoll
- D3DXQuaternionSlerp
- D3DXQuaternionSquad
- D3DXQuaternionToAxisAngle
Direct3D-program kan använda följande funktioner för att förenkla uppgiften att arbeta med trekomponentvektorer.
- D3DXVec3Lägg till
- D3DXVec3BaryCentric
- D3DXVec3CatmullRom
- D3DXVec3Cross
- D3DXVec3Dot
- D3DXVec3Hermite
- D3DXVec3Length
- D3DXVec3LengthSq
- D3DXVec3Lerp
- D3DXVec3Maximize
- D3DXVec3Minimize
- D3DXVec3Normalize
- D3DXVec3Project
- D3DXVec3Scale
- D3DXVec3Subtract
- D3DXVec3Transform
- D3DXVec3TransformCoord
- D3DXVec3TransformNormal
- D3DXVec3Unproject
Många ytterligare funktioner som förenklar uppgifter med två- och fyrakomponentvektorer ingår i Math Functions- som tillhandahålls av D3DX-verktygsbiblioteket.
Relaterade ämnen