2012-10-13 3 views
0

회전 벡터의 회전 행렬 과 회전 행렬의 방향 벡터를 계산해야합니다.Vector의 Direct3D 회전 행렬

위쪽 방향이 z 축과 일치해야합니다. 앞으로가 y이고 오른쪽이 x입니다.

D3DXMATRIX m; // the rotation matrix 
    D3DXVECTOR3 v; // this is the direction vector wich is given 
    D3DXVECTOR3 r; // resulting direction vector 

    float len = D3DXVec3Length(&v); // length of the initial direction vector 

    // compute matrix 
    D3DXMatrixLookAtLH(&m, &v, &D3DXVECTOR3(0,0,0), &D3DXVECTOR3(0,0,1)); 

    // use the matrix on a vector { 0, len, 0 } 
    D3DXVec3TransformCoord(&r, &D3DXVECTOR3(0,len,0), &m); 

이제 벡터 R V 는 동일해야하지만, 밤은. 필요한 결과를 얻으려면 정확히 무엇을해야합니까?

답변

1

질문이 다소 혼란 스럽습니다. 방향 벡터를 사용하면 몇 가지 추가 구속 조건을 정의하지 않는 한 무한 회전 행렬을 정의하여 카메라가 그 방향을 가리키고 볼 수 있습니다. 귀하의 코드에 따라 위로 벡터를 Z :-)로 가정합니다.

처음에는주의해야합니다. 오른쪽 좌표계를 설명하고 있지만 왼쪽을 사용하고있는 것 같습니다. 처리 함수 D3DXMatrixLookAtLH. 그 지정 룩업의 매트릭스를 작성

D3DXMATRIX* D3DXMatrixLookAtLH(
    _Inout_ D3DXMATRIX *pOut, 
    _In_  const D3DXVECTOR3 *pEye, 
    _In_  const D3DXVECTOR3 *pAt, 
    _In_  const D3DXVECTOR3 *pUp 
); 

: 2 위 이 함수 참조 말한다

  • 카메라가 v 벡터의 끝에 위치하고,
  • 카메라는이 오른쪽, 또는 당신은 어쩌면 opposit을 찾고 있었다 확실

[0 0 0] 향해 찾고있다 이자형?

세 번째로, 회전 행렬을 축척 된 Y 기본 벡터 [0 length 0]에 적용하고 있습니다. 회전 된 벡터가 v이되도록하려면 [len 0 0] 대신 X 기준 벡터에 적용해야한다고 생각합니다.