본문 바로가기

엔진프로그래밍

회전 행렬과 LookAt 행렬

회전 행렬

회전 행렬은 위의 3개의 행렬을 곱하여 오일러 각에 대한 회전 행렬을 구할 수 있습니다.

이렇게 구한 회전 행렬을 코드에 대입합니다.

결과

LookAt 행렬

게임에서의 카메라는 캐릭터를 바라보는 경우가 대부분입니다.

x,y,z 값을 각각 right, up, forward라고 할 때

카메라에서 forward 즉 z값은 카메라의 위치에서 바라보는 타겟의 위치를 빼면 forward값을 구할 수 있습니다.

이 때 카메라의 뒷 방향이 z+방향이므로 타겟에서 카메라쪽으로 향하는게 맞습니다.

코드로 보면 아래처럼 됩니다.

카메라의 right값은 방금 구한 forward값과 외적하여 구할 수 있습니다.

아래 코드에서 UnitY는 월드에서의 y값입니다.

up값은 forward값과 right값을 외적하여 구할 수 있습니다.

이렇게 구한 3개의 벡터를 하나의 행렬로 만들어서 역행렬을 해주면 LootAt행렬이 완성됩니다.

결과

카메라좌표

위 상황에서 카메라 좌표가 (0, 500, 0)에서 타켓(0, 0, 0)을 바라볼 때의 문제점

카메라좌표가 (0, 500, 0)이라면

이 공식에서 월드y값과 외적할 때 결과 값이 (0, 0, 0)이 나오기 때문에 화면에 문제가 생길것입니다.

이 문제를 해결하려면 외적한 결과 값이 (0, 0, 0)일 때 월드에서의 다른 축을 기준으로 외적을 하여 구하면 될것입니다.

'엔진프로그래밍' 카테고리의 다른 글

오일러 각과 평면의 방정식  (0) 2020.07.15
백페이스 컬링과 원근 투영  (0) 2020.07.08
UV좌표와 뷰 좌표계  (0) 2020.06.24
Galois Field와 아핀 조합  (0) 2020.06.10
코헨 서덜랜드 알고리즘 구현  (0) 2020.06.03