2009년 04월 23일
[3D] 물체를 임의 방향으로 바라보게 하기
월드변환용 4x4행열은 다음과 같은 특성이 있습니다. (왼손좌표계)
Right Vector x Right Vector y Right Vector z 0
Up Vector x Up Vector y Up Vector z 0
Look Vector x Look Vector y Look Vector z 0
Position x Position y Position z 1
보시는것같이 특정 물체의 Right, Up, Look, Position을 각행에 대입시켜주면
월드변환행열이 되는것이죠. (행열 유도한것 들은거 같은데, 생각나진 않네요;;)
즉, 바라보고 싶은 방향의 Right, Up, Look을 알면, 쉽게 물체를 원하는 곳으로
회전시킬수 있는 행열을 구할수 있습니다. (X-> Right, Y->UP, Z->Look에 대한 회전)
Right나 Up에 상관없이 바라보는 방향만 구하고 싶다면, 적당히 Right, Up를 구해도 되지요.
이런식으로 탄환같이 Right나 Up이 별로 중요하지 않는 물체를 쉽게 구현할수 있게 됩니다.
직접 행열에 값을 대입해주는게 싫으면 카메라행열을 이용해도 됩니다.
이것은 D3DXMatrixLookAtLH을 이용하는 것입니다.
이 함수는 PosPoint, LookPoint, UpVecter를인자로 받습니다.
카메라변환은 일반적인 월드배치의 역변환이므로 카메라의 역은 월드배치가 되지요.
여기에 회전만 구하니 4행의 1,2,3열값을 0으로 만들어주면 원하는 회전행열을 얻습니다.
D3DXMatrixLookAtLH(&Rot, &POS, &LOOK, &UP);
NewRot1._41 = 0.0f; NewRot1._42 = 0.0f; NewRot1._43 = 0.0f;
D3DXMatrixInverse(&Rot, NULL, &Rot);
마지막에 역행열대신 전치행열을 구해도 결과는 같습니다.
Right Vector x Right Vector y Right Vector z 0
Up Vector x Up Vector y Up Vector z 0
Look Vector x Look Vector y Look Vector z 0
Position x Position y Position z 1
보시는것같이 특정 물체의 Right, Up, Look, Position을 각행에 대입시켜주면
월드변환행열이 되는것이죠. (행열 유도한것 들은거 같은데, 생각나진 않네요;;)
즉, 바라보고 싶은 방향의 Right, Up, Look을 알면, 쉽게 물체를 원하는 곳으로
회전시킬수 있는 행열을 구할수 있습니다. (X-> Right, Y->UP, Z->Look에 대한 회전)
Right나 Up에 상관없이 바라보는 방향만 구하고 싶다면, 적당히 Right, Up를 구해도 되지요.
이런식으로 탄환같이 Right나 Up이 별로 중요하지 않는 물체를 쉽게 구현할수 있게 됩니다.
직접 행열에 값을 대입해주는게 싫으면 카메라행열을 이용해도 됩니다.
이것은 D3DXMatrixLookAtLH을 이용하는 것입니다.
이 함수는 PosPoint, LookPoint, UpVecter를인자로 받습니다.
카메라변환은 일반적인 월드배치의 역변환이므로 카메라의 역은 월드배치가 되지요.
여기에 회전만 구하니 4행의 1,2,3열값을 0으로 만들어주면 원하는 회전행열을 얻습니다.
D3DXMatrixLookAtLH(&Rot, &POS, &LOOK, &UP);
NewRot1._41 = 0.0f; NewRot1._42 = 0.0f; NewRot1._43 = 0.0f;
D3DXMatrixInverse(&Rot, NULL, &Rot);
마지막에 역행열대신 전치행열을 구해도 결과는 같습니다.
# by | 2009/04/23 02:29 | Programming | 트랙백 | 덧글(0)




☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]