DirectX矩阵转换

时间:2014-01-26 19:17:17

标签: c++ directx d3dx matrix-transform

我正在尝试使用D3DXVec3TransformCoordArray和世界矩阵来定位和旋转三角形,但是当我绘制三角形时,它们会被扭曲变形。我究竟做错了什么? (顺便说一句。我需要在CPU上执行此操作,不是出于绘图目的......)

        D3DXVECTOR3 tri[3];
        tri[0] = mbuffer.vertices[mbuffer.indices[x]].position;
        tri[1] = mbuffer.vertices[mbuffer.indices[x + 1]].position;
        tri[2] = mbuffer.vertices[mbuffer.indices[x + 2]].position;
        D3DXMatrixRotationQuaternion(&rotM, &obj->getRotation());
        D3DXMatrixTranslation(&posM, obj->getPosition().x, obj->getPosition().y, obj->getPosition().z);
        transM = rotM * posM;
        D3DXVec3TransformCoordArray(tri, 1, tri, 1, &transM, 3);

当我注释掉最后一行D3DXVec3TransformCoordArray(tri, 1, tri, 1, &transM, 3);时,该对象渲染得很好但当然没有变换......

编辑: 此外,obj->getPosition()obj->getRotation()会返回正确的值。

EDIT2: 好吧,好像是

D3DXVec3TransformCoord(&tri[0], &tri[0], &transM);
D3DXVec3TransformCoord(&tri[1], &tri[1], &transM);
D3DXVec3TransformCoord(&tri[2], &tri[2], &transM);

而不是

D3DXVec3TransformCoordArray(tri, 1, tri, 1, &transM, 3);

解决了这个问题。

有谁能告诉我如何正确使用D3DXVec3TransformCoordArray? (MSDN不是很有帮助)

1 个答案:

答案 0 :(得分:0)

编辑: D3DXVec3TransformCoordArray在这种情况下,步幅参数的大小应为D3DXVECTOR3。 如果你想旋转和翻译,尝试传入D3DXVec3TransformCoordArray transM矩阵而不是posM。