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