如何在DirectX上旋转XYZ轴上的对象?

时间:2012-01-09 13:09:39

标签: c++ visual-c++ directx rotation

我试过这段代码:

D3DXMatrixRotationX(&matRotate, rx);
D3DXMatrixRotationY(&matRotate, ry);
D3DXMatrixRotationZ(&matRotate, rz);
d3ddev->SetTransform(D3DTS_WORLD, &matRotate);

但似乎总是只旋转最后一次旋转(Z轴)。

如何同时旋转所有XYZ轴的对象? 我试图找到OpenX等效的OpenX旋转:

glRotatef(rx, 1, 0, 0);
glRotatef(ry, 0, 1, 0);
glRotatef(rz, 0, 0, 1);


修改 看起来我自己想出来了:

D3DXMATRIX matRotateX;
D3DXMATRIX matRotateY;
D3DXMATRIX matRotateZ;
D3DXMatrixRotationX(&matRotateX, rx);
D3DXMatrixRotationY(&matRotateY, ry);
D3DXMatrixRotationZ(&matRotateZ, rz);
D3DXMATRIX matRotate = matRotateX*matRotateY*matRotateZ;
d3ddev->SetTransform(D3DTS_WORLD, &matRotate);

如果没有,请发表评论。我不能把它作为答案发布,直到8个小时过去了! (需要+7声望才能做到)。

1 个答案:

答案 0 :(得分:4)

D3DXMatrixRotationX不会旋转矩阵,但会创建一个可用于旋转的矩阵。

所以你可以在每一步之后使用矩阵并旋转别的东西,或者你可以使用D3DXMatrixRotationYawPitchRoll,这样你只需要创建一次......

D3DXMatrixRotationYawPitchRoll(&matRotate, ry, rx, rz);

编辑: 你的编辑也有效......