카메라의 좌표로 바라보기
같은 의자라도 방 안의 어디에 두었는지, 어느 자리에서 바라보는지에 따라 화면에서의 위치가 달라집니다. 좌표는 어떤 기준에서 잰 값인지 함께 알아야 의미가 있습니다.
세 가지 공간
- 모델 공간: 물체 자체의 원점을 기준으로 만든 좌표입니다.
- 월드 공간: 여러 물체를 같은 장면 안에 배치한 좌표입니다.
- 뷰 공간: 카메라가 원점에 있는 것처럼 바꾼 좌표입니다.
열벡터 관례에서 p_view = V M p_model로 적습니다. M은 물체를 장면에 놓는 모델 변환, V는 장면을 카메라 기준으로 바꾸는 뷰 변환입니다.
카메라가 오른쪽으로 가면
카메라가 회전하지 않고 x=3으로 이동했다고 합시다. 월드의 x=5에 있는 점은 카메라 기준으로 x=2에 있습니다.
world_point = (5, 1, 4)
camera_position = (3, 0, 0)
view_point = tuple(p - c for p, c in zip(world_point, camera_position))
print(view_point)
출력은 (2, 1, 4)입니다. 카메라가 오른쪽으로 움직이면 화면 속 장면은 반대쪽으로 이동하는 효과가 납니다. 카메라의 위치를 더하는 대신 빼는 이유입니다.
카메라가 회전했다면 위치를 빼는 것만으로 부족합니다. 카메라의 회전도 거꾸로 적용해야 합니다. 뷰 변환은 카메라를 월드에 놓은 변환의 역변환입니다.
확인 문제
카메라와 물체를 같은 방향으로 같은 거리만큼 옮겼습니다. 둘 사이의 상대 위치는 변할까요?
해설 보기
회전과 다른 조건이 같다면 변하지 않습니다. 두 위치의 차이가 그대로이기 때문입니다. 물체가 화면에 안 보일 때는 먼저 카메라 기준으로 어느 쪽에 있는지 살펴보세요.