我试过这段代码:
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声望才能做到)。
答案 0 :(得分:4)
D3DXMatrixRotationX不会旋转矩阵,但会创建一个可用于旋转的矩阵。
所以你可以在每一步之后使用矩阵并旋转别的东西,或者你可以使用D3DXMatrixRotationYawPitchRoll,这样你只需要创建一次......
D3DXMatrixRotationYawPitchRoll(&matRotate, ry, rx, rz);
编辑: 你的编辑也有效......