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

Roo*_*kie 5 c++ directx rotation visual-c++

我试过这段代码:

D3DXMatrixRotationX(&matRotate, rx);
D3DXMatrixRotationY(&matRotate, ry);
D3DXMatrixRotationZ(&matRotate, rz);
d3ddev->SetTransform(D3DTS_WORLD, &matRotate);
Run Code Online (Sandbox Code Playgroud)

但它似乎总是只旋转最后一个旋转(Z轴).

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

glRotatef(rx, 1, 0, 0);
glRotatef(ry, 0, 1, 0);
glRotatef(rz, 0, 0, 1);
Run Code Online (Sandbox Code Playgroud)

编辑: 看起来我自己想通了:

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);
Run Code Online (Sandbox Code Playgroud)

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

Cpt*_*Red 4

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

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

D3DXMatrixRotationYawPitchRoll(&matRotate, ry, rx, rz);
Run Code Online (Sandbox Code Playgroud)

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