2014-09-10 2 views
1

다음 문제가 있습니다. 나는 동시에 3 축을 중심으로 3D 모델을 회전하려고합니다. 의미 나는 키보드의 버튼을 눌러 X 축, Y 축, X 축 등을 중심으로 모델을 회전시키고 자한다.DirectX 11.2 C++에서 모든 3 (X, Y, Z) 축을 중심으로 모델 회전

void Rotate(float radians_x, float radians_y, float radians_z) 
    { 
     DirectX::XMStoreFloat4x4(&_transfer.world, DirectX::XMMatrixTranspose(DirectX::XMMatrixRotationZ(radians_z))); 
     DirectX::XMStoreFloat4x4(&_transfer.world, DirectX::XMMatrixTranspose(DirectX::XMMatrixRotationY(radians_y))); 
     DirectX::XMStoreFloat4x4(&_transfer.world, DirectX::XMMatrixTranspose(DirectX::XMMatrixRotationX(radians_x))); 
    } 

마지막 회전이 수행됩니다 :이 같은 XMMatrixRotationX, XMMatrixRotationY 또는 XMMatrixRotationZ을 사용할 때 문제입니다. 코드에서 볼 수 있듯이 각 축을 중심으로 객체를 특정 각도 (실제로는 라디안)만큼 회전시킬 수 있어야합니다. XMMatrixRotationAxis 메서드가이 작업을 수행한다는 것을 알았지 만 하나의 각도 매개 변수 만 사용하고 각 축마다 다른 용도를 사용하려고합니다. 이 일을 어떻게 할 수 있는지 누구든지 나를 도울 수 있습니까?

또한 XMMatrixRotationAxis에 첫 번째 매개 변수로 보낼 내용을 알지 못합니다. 단지 축 벡터를 말합니다. 어떻게 코드에 접근했는지 알지 못합니다. 게시 된 코드에서 사용한 메소드는 축을 전송할 필요가 없습니다. 나는 이것이 왜 필요한지, 또는 어떻게해야하는지 이해하지 못한다.

도움을 주시면 감사하겠습니다.

답변

2

나는 대답 여기있다 :

http://books.google.hr/books?id=7ZkLAAAAQBAJ&pg=PA251&lpg=PA251&dq=XMMatrixRotationQuaternion&source=bl&ots=xveQhsj-x_&sig=Ny6IdK1JNFBF99LyC_HY8b-y4tI&hl=hr&sa=X&ei=dtkQVOmmA8aXatfugZgL&ved=0CHEQ6AEwCA#v=onepage&q=XMMatrixRotationQuaternion&f=false

내가 XMMatrixRotationRollPitchYaw을 사용해야합니다. 코드는 지금 보이는 : 마법처럼

void Rotate(float radians_x, float radians_y, float radians_z) 
    { 
     DirectX::XMStoreFloat4x4(&_transfer.world, DirectX::XMMatrixTranspose(DirectX::XMMatrixRotationRollPitchYaw(radians_x, radians_y, radians_z))); 
    } 

작품 :