D3DXVec3TransformNormal()和D3DXVec3TransformCoord()
根据给定的矩阵变换法线(向量)或坐标,区别在于后者变换后将w分量投射回1。
向量为两个坐标的差值,因此第四维的值为0,而坐标的第四维的值则为1。
上述两个函数具体的计算过程如下:
D3DXVec3TransformNormal
VOut.x = VIn.x * M.11 + VIn.y * M.21 + VIn.z * M.31
VOut.y = VIn.x * M.12 + VIn.y * M.22 + VIn.z * M.32
VOut.z = VIn.x * M.13 + VIn.y * M.23 + VIn.z * M.33
D3DXVec3TransformCoord
VOut.x = VIn.x * M.11 + VIn.y * M.21 + VIn.z * M.31 + M.41
VOut.y = VIn.x * M.12 + VIn.y * M.22 + VIn.z * M.32 + M.42
VOut.z = VIn.x * M.13 + VIn.y * M.23 + VIn.z * M.33 + M.43
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 |
D3DXVec3TransformNormal 函数
用矩阵变换3-D向量标准形式。
定义:
D3DXVECTOR3 *WINAPI D3DXVec3TransformNormal(
D3DXVECTOR3 *pOut,
CONST D3DXVECTOR3 *pV,
CONST D3DXMATRIX *pM
);
Parameters
pOut
[in, out] 指向 D3DXVECTOR3 结果的操作结果。
pV
[in] 指向 D3DXVECTOR3 结构的向量。
pM
[in] 指向 D3DXMATRIX 结构的矩阵。
返回值:
指向 D3DXVECTOR3 结构的变换后的向量。
说明:
这个函数用矩阵pM变换向量pV标准形式 (x, y, z, 0),不是齐次坐标形式。
如果一个非仿射矩阵变换,那么这个矩阵要作逆运算后再转置才传给本函数。
函数返回值跟pOut 参数返回值是一样的。这样可以让函数D3DXVec3TransformNormal作为其它函数的参数使用。
函数信息:
Header | d3dx9math.h |
Import library | d3dx9.lib |
Minimum operating systems | Windows 98
|