Tôi đã thử mã này:Làm cách nào để xoay đối tượng trong trục XYZ trên DirectX?
D3DXMatrixRotationX(&matRotate, rx);
D3DXMatrixRotationY(&matRotate, ry);
D3DXMatrixRotationZ(&matRotate, rz);
d3ddev->SetTransform(D3DTS_WORLD, &matRotate);
Nhưng dường như luôn xoay vòng quay cuối cùng (trục Z).
Làm cách nào để xoay đối tượng với tất cả các trục XYZ cùng một lúc? Im cố gắng tìm DirectX tương đương cho OpenGL xoay:
glRotatef(rx, 1, 0, 0);
glRotatef(ry, 0, 1, 0);
glRotatef(rz, 0, 0, 1);
EDIT: Hình như tôi figured it out bởi bản thân mình:
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);
nếu không, hãy bình luận . Tôi không thể đăng nó như một câu trả lời cho đến 8 giờ đã trôi qua! (cần +7 danh tiếng để làm điều đó).
Tôi không biết về DirectX, nhưng bạn có thể có phép nhân theo thứ tự sai. Nếu bạn biết đơn đặt hàng của bạn là chính xác, hãy bỏ qua nhận xét này, nếu không hãy kiểm tra nó. –