2012-01-09 8 views
5

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 đó).

+0

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ó. –

Trả lời

4

D3DXMatrixRotationX không xoay một ma trận nhưng tạo ma trận có thể được sử dụng để xoay thứ gì đó.

Vì vậy, nó, bạn có thể sử dụng ma trận ngay sau đó từng bước và xoay cái gì khác hoặc bạn có thể sử dụng D3DXMatrixRotationYawPitchRoll để bạn chỉ cần tạo một lần ...

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

EDIT: chỉnh sửa của bạn làm việc quá ...

+0

tìm kiếm tốt, vui lòng chỉnh sửa thông số của bạn theo đúng thứ tự: ry, rx, rz – Rookie

+0

@Rookie cảm ơn, và đây là những gì sẽ xảy ra khi bạn quên kiểm tra lại ... Đã sửa lỗi ... –