[그래픽스]

[그래픽스] Modelview Matrix, Projection Matrix, 카메라(오브젝트, 렌즈) 조정

seom-j 2024. 2. 7. 21:11

 

📌 Modelview Matrix / Projection Matrix

Modelview Matrix : 객체를 어떻게 놓을지를 결정하는 매트릭스

Projection Matrix : 뷰 좌표계에서의 객체를 어떻게 화면에 투사할지를 결정하는 매트릭스

 

ex)

그림을 그릴 때, 먼저 그림의 크기, 위치, 회전 등을 정하는 작업이 모델뷰 매트릭스에 해당

이후 종이를 눈과 물체 사이에 놓아(시점을 정하는 카메라 변환에 해당) 물체를 종이에 그리는 것이 프로젝션 매트릭스에 해당

 

모델뷰 매트릭스는 물체의 크기와 위치를 결정하고, 카메라의 시점을 결정하여 뷰 좌표계로 변환함

이후, 프로젝션 매트릭스는 뷰 좌표계에서 화면 좌표계로 변환하여 3D 객체를 화면에 투영하여 그림

 

따라서 카메라를 오브젝트로 취급할 때는 모델뷰 매트릭스를, 렌즈로써 시점을 볼 때에는 프로젝션 매트릭스를 이용하여 3D 모델을 표현하고 변환하면 됨

 

 

📌 시청 과정의 세 가지 측면

모두 그래픽스 파이프라인에서 구현함

  1. 카메라 위치 지정 (모델뷰 메트릭스 설정)
  2. 렌즈 선택 (projection 메트릭스 설정)
  3. 클리핑 (보기 볼륨 설정)

 

 

📌 OpenGL에서의 카메라

오브젝트와 카메라 프레임이 동일 (model view matrix is an identity)

카메라가 원점에 위치 / 음의 z방향을 가리킴

기본 볼륨은 원점을 중심으로 길이 2의 변이 있는 정육면체 (projection matrix is an identity)

기본 투영은 직교(Orthogonal)

 

 

📌 카메라 프레임 이동

양수 및 음수 z값을 모두 가진 개체를 시각화하려면

  1. 카메라를 양수 z방향으로 이동 (translate the camera frame)
  2. 카메라를 음수 z방향으로 이동 (translate the world frame)

 

두가지 view는 모델 뷰 매트릭스에 의해 결정됨

glTranslatef(0.0, 0.0, -d)
// (d>0)

 

회전과 이동을 통해 원하는 위치로 카메라를 이동할 수 있음

ex ) 측면도 : 카메라 회전, 멀리 이동, 모델뷰 행렬 c=tr

glMatrixMode(GL_MODELVIEW)
glLoadIdentity();
glTranslatef(0.0, 0.0, -d);
glRotatef(90.0, 0.0, 1.0, 0.0);

➡️변환은 마지막 지정 변환이 가장 먼저 적용됨에 주의