본문 바로가기
IT/컴퓨터 그래픽스

Camera Coordinates

by 신인용 2021. 1. 17.
반응형

 

 

 

Camera Coordinates

 

 

 

 

좌표계는 어떤 게 있을까?

1. Modeling Coordinates

 Modeling 하는 좌표계

 실세계와 다른 독립된 좌표계이다.

 

2. World Coordinates

 실세계의 좌표계

 Modeling 된 물체들이 World Coordinates에 배치된다.

 

3. Camera Coordinates

 카메라로 보는 좌표계

 유저가 바라보게 되는 좌표계이다.

 

 

이 때 Camera Coordinates 는 어떻게 구성될까?

 

 

 

 

 

Camera Coordinates

Camera 는 그 자리에 있고, 그 위치에 대한 상대적인 위치를 정의하면 된다.

그림으로 살펴보자.

 

 

World Coordinates가 있고, Camera Coordinates가 있다고 하자.

이 때 World Coordinates에 있는 물체들을 Camera에 대해서 상대적으로 어떤 위치에 있는가를 알면 된다.

즉 World Coordinates를 Camera Coordinates에 맞춰 이동시키고 회전시키는 것이다.

 

 

 

1. 이동 (Translation)

 Camera의 위치를 World Coordinates의 원점으로 이동시켜주면, Camera와 World가 Camera와 World가 서로 떨어진 거리만큼 볼 수 있게 된다.

=> Camera의 원점을 알면 된다.

 

 

2. 회전 (Rotation)

 회전 Matrix 를 구하기 위해선, Camera Coordinates의 X축, Y축, Z축을 알아야 한다.

 

 

Zview

World Coordinates 에서 카메라를 보는 방향으로 Zview 를 구한다.  (P0 - Pref)

 

 

Yview

Zview 와 World Coordinates의 y축을 이용하여 Yview를 구한다.

(이 때 Yview 는 기울어져 있으면 안된다. Camera의 Y축이 기울어져 있으면 고개를 꺾어 보는 것같이 부자연스럽게 바라보게 된다.)

 

 

Xview

Xview 는 Yview 와 Zview 의 Cross Product로 구한다.

 

 

이제 Camera Coordinates의 각 축들을 구했으니 회전 Matrix도 구해, World Coordinates를 회전시켜주면 된다.

 

 

 

 

Xview = u

Yview = v

Zview = n

P0 = (x0, y0, z0)

로 표기해보자.

이 때 Translation Matrix와 Rotation Matrix를 구하면 다음과 같다.

 

따라서 Camera에 대한 상대적인 위치를 정의해주기 위해선,

1. Camera의 위치를 World Coordinates로 이동시켜주고,

2. Camera에 맞춰 World 에 있는 물체를 회전시켜주면 된다.

즉 R*T 의 Transformation 연산을 적용하면 된다.

 

 

 

 

 

 

정리

Camera Coordinates 를 정의하기 위해 알고 있어야 할 것

1. Camera의 위치

2. Camera가 보는 방향

3. Camera Coordinates의 View-Up vector (Yview) -> Camera가 roll 되는 것을 방지.

 

이것들로 Transformation Matrix를 만들고, Camera에 대해 상대적인 위치를 정의해주면 된다.

 

 

 

 

 

 

OpenGL

glm::lookAt(vec3 eye, vec3 center, vec3 up)

eye : Camera의 World Coordinates 상의 위치

center : 화면 가운데의 world Coordinates 상의 위치

up : Yview Vector

 

#include <glm/gtc/matrix_transform.hpp> 에 존재.

mat4 viewingMatrix = lookAt(eye, center, up);

 

이렇게 만들어진 viewingMatrix는 Shader한테 보내져서 연산하게 된다.

 

 

 

 

 

 

 

[참고]

Interactive Computer Graphics: A Top-Down Approach with Shader-based OpenGL 6th edition / 저자: Edward Angel, Dave Shreiner / 출판사: Pearson Education

 

 

반응형

'IT > 컴퓨터 그래픽스' 카테고리의 다른 글

Rasterization  (0) 2021.01.31
Perspective Projection  (0) 2021.01.18
GPU와 Buffer  (0) 2021.01.17
GPU에 data를 전달하기  (0) 2021.01.17
[ 3D Rotation ] 임의의 축으로 회전하기  (4) 2020.12.04

댓글