2012-01-25 29 views
0

我正在翻译一些代码到JavaScript中。我试图复制如何通过mat4转换vec3?

D3DXVECTOR3* D3DXVec3TransformCoord(
__inout D3DXVECTOR3 *pOut, 
__in  const D3DXVECTOR3 *pV, 
__in  const D3DXMATRIX *pM 
); 

这适用于Mat4转换到Vec3(这将导致无效mat4)。如何将4d矩阵投影到3d矩阵中并执行操作?你会以什么顺序做数学?我们可以假设,W = 1,如下面的帖子:

DirectX Math function confusion

+0

你真的在问如何通过向量来转换矩阵吗? –

+0

看这里:http://www.gamedev.net/topic/11906-d3dxvec3transformcoord/ – GManNickG

+0

那么,建立在c + +和D3DXVec3Transform和D3DXVec3TransformCoord之间,我只是想确定他们执行什么确切的数学。你永远不知道它是否比你期望的要稍微多一点,或者比你想象的少一点。该链接有帮助。现在我知道在哪里可以找到内部。 – FlavorScape

回答

1

documentation这个功能说“由给定矩阵变换的3D矢量,投影结果转化成W = 1” 。

换句话说,功能扩展向量[X,Y,Z][X,Y,Z,1],然后执行乘法,结果截断到操作后三个要素。

编辑:根据this thread操作XA,即具有在左边的行向量,这相当于齐次变换乘法:XM(0)+ y M的(1)+ ZM(2)+ M(3),其中M(i)是矩阵的第i列。

+0

这是正常的c + + Vec3 * Mat4相同吗?我发现操作员正在使用,但我不知道它实际上在做什么。 – FlavorScape

+0

Mathetically Vec3 * Mat4未定义,矢量长度必须与矩阵中的行数匹配。如果考虑到w = 1“投影”,则应该得到与Vec4 * Mat4例程相同的结果。 – 2012-01-27 10:00:55