'게임 프로그래밍/directx'에 해당되는 글 1건

  1. 2008.07.16 라디안값 구하기
2008.07.16 01:32

D3DXVECTOR3 m_vForward;           // 물체의 앞을 가르키는 벡터
D3DXVECTOR3 m_vUp;                   // 물체의 위를 가르키는 벡터
D3DXVECTOR3 m_vRight;               // 물체의 오른쪽을 가르키는 벡터

m_vForward.x = 0.0f;
m_vForward.y = 0.0f;
m_vForward.z = 1.0f;
// 위와 같이 설정 하는 이유는 물체의 앞을 가르키게 하기위해서
// z축이 앞이 므로 1.0f으로 설정한다.
// z축을 1.0f로 설정을 해줘야 노멀 벡터가 된다.

m_vUp.x = 0.0f;
m_vUp.y = 1.0f;
m_vUp.z = 0.0f;
// 위와같이 설정하는 이유는 물체의 위를 가르키게 하기 위해서
// y축이 위 이므로 1.0f로 설정
// y축을 1.0f로 해야 노멀 벡터

// 이제 포워드와 업벡터가 설정되었으면 우향 벡터를 설정한다.
// 직접 위처럼 설정해줘도 되지만 우향 벡터는 포워드 벡터가 바뀌면서 계속 바뀌기 때문에
// 연산을 해서 구한다

D3DXVec3Cross(&m_vRight, &m_vForward, &m_vUp);
// 위 함수는 2번째 인자의 벡터와 3번쨰 인자의 벡터를 외적해서 수직인 벡터를 첫번째 인자에
// 아웃을 시켜주어서 m_vRight를 구해준다

// 이렇게 앞 위 오른쪽이 설정이 되었으면 이제 자기가 이동 하고 싶은 벡터를 구한뒤
// 그 벡터를 노멀라이즈 시킨뒤

D3DXVec3Normalize(&vVec, &vVec);
// vVec 는 어딜 바라볼지 보는 벡터
m_fAngle = D3DXVec3Dot(&vVec, &m_vForward);
// 이렇게 하면 vVec 와 m_vForward를 내적 시킨뒤 cos세타를 m_fAngle에 리턴한다
// 그 뒤
m_fAngle = acos(m_fAngle);
// m_fAngle 에 acos(m_fAngle)을 해서 cos을 벗긴뒤 라디안값을 넣어준다.
// 그리고 D3DXMatrixRotationY(&matTM, m_fAngle);
// 위 함수로 Y축을 중심으로 m_fAngle만큼 회전 시키면 원하는 벡터 쪽으로 회전을 시킬수가 있게
// 된다!!

신고
Posted by 우엉 여왕님!! ghostkyow

티스토리 툴바