회전 행렬
회전 행렬은 위의 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 |