码迷,mamicode.com
首页 > 其他好文 > 详细

【转载】D3DXVec3TransformNormal and D3DXVec3TransformCoord

时间:2016-06-04 23:43:06      阅读:240      评论:0      收藏:0      [点我收藏+]

标签:

原文:D3DXVec3TransformNormal and D3DXVec3TransformCoord

 

D3DXVec3TransformCoord 对向量进行变换,没啥好说明的,默认向量为行向量,矩阵为列矩阵。
D3DXVec3TransformNormal 这个家伙对法线进行变换,其实就是对于方向性的向量进行变换,在计算中经常用来变换方向,“D3DXVec3TransformNormal transforms a normal using the transpose of the inverse of the given matrix”,他对向量进行变换时,会使用您提供的参数矩阵,先进行逆矩阵计算,再进行转置,然后变换向量,结果就是你想要的。

坐标和向量是有区别的:向量的第四维数值是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

 

 

 

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 and D3DXVec3TransformCoord

标签:

原文地址:http://www.cnblogs.com/zhehan54/p/5559691.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!