天天看點

D3DXVec3TransformNormal and D3DXVec3TransformCoord

D3DXVec3TransformCoord 函數

用矩陣變換3-D向量,并且用w = 1投影結果。

定義:

D3DXVECTOR3 *WINAPI D3DXVec3TransformCoord(      

    D3DXVECTOR3 *pOut,

    CONST D3DXVECTOR3 *pV,

    CONST D3DXMATRIX *pM

);

Parameters

pOut

[in, out] 指向 D3DXVECTOR3 結構的操作結果。

pV

[in] 指向 D3DXVECTOR3 結構的向量。

pM

[in] 指向 D3DXMATRIX 結構的變換矩陣。

Return Value

指向 D3DXVECTOR3 結構的變換後的向量。

說明:

這個函數用矩陣pM變換3-D向量pV (x, y, z, 1),并且用w = 1投影結果。

函數傳回值跟pOut 參數傳回值是一樣的。這樣可以讓函數D3DXVec3TransformCoord作為其它函數的參數使用。

函數資訊:

Header d3dx9math.h
Import library d3dx9.lib
Minimum operating systems Windows 98

函數相關:

D3DXVec3Transform, D3DXVec3TransformNormal

D3DXVec3TransformNormal 函數

用矩陣變換3-D向量标準形式。

D3DXVECTOR3 *WINAPI D3DXVec3TransformNormal(      

[in, out] 指向 D3DXVECTOR3 結果的操作結果。

[in] 指向 D3DXMATRIX 結構的矩陣。

傳回值:

這個函數用矩陣pM變換向量pV标準形式 (x, y, z, 0),不是齊次坐标形式。

如果一個非仿射矩陣變換,那麼這個矩陣要作逆運算後再轉置才傳給本函數。

函數傳回值跟pOut 參數傳回值是一樣的。這樣可以讓函數D3DXVec3TransformNormal作為其它函數的參數使用。

差別:

坐标和向量是有差別的:向量的第四維數值是0,坐标的第四維數值是1

          向量 = 兩個坐标的內插補點      第四維同樣做減法,結果是0

      向量的坐标變換用D3DXVec3TransformNormal,點用D3DXVec3TransformCoord。D3DXVec3Transform和D3DXVec3TransformCoord相似,差別在于後者變換後将w投射回1

實際執行計算的時候是:

D3DXVec3TransformCoord

VOut.x = V1.x * M.11 + V1.y * M.21 + V1.z * M.31 + M.41

VOut.y = V1.x * M.12 + V1.y * M.22 + V1.z * M.32 + M.42

VOut.z = V1.x * M.13 + V1.y * M.23 + V1.z * M.33 + M.43 

因為是向量,第四維不計算:

D3DXVec3TransformNormal

VOut.x = V1.x * M.11 + V1.y * M.21 + V1.z * M.31

VOut.y = V1.x * M.12 + V1.y * M.22 + V1.z * M.32

VOut.z = V1.x * M.13 + V1.y * M.23 + V1.z * M.33