[OpenGL] 18. Transformation (6) - View Change (VCS)

2024. 4. 21. 10:29·CS/HCI 윈도우즈프로그래밍
반응형

이번 글에서는 시점 변환에 대해 정리하려고 한다.

 

시점 변환은 주어진 그림에서 카메라의 위치를 이리저리 옮기는 것을 말한다.

카메라의 위치 정보를 설정하는 좌표계는 View Coordinate System (VCS, 시점좌표계) 이다.

 

따라서 시점을 옮기는 행위는 VCS이 변환되는 것을 의미한다.

이를 위해 사용하는 행렬이 뷰 행렬이다.

(그런데 GL에서는 Model 행렬과 View 행렬을 합해서 하나의 행렬로 취급한다고 한다.)

 


 

 

그렇다면 뷰 행렬은 어떻게 구할까?

위 이미지에서 보는 것이 뷰 행렬을 구하는 것과 관련되어 있다.

결국 우리가 원하는 것은 VCS를 구하는 것이다.

즉, VCS의 x, y, z 축을 결정하고, 이 축을 기준으로 기존 정점을 새롭게 표현하는 것이다.

 

이는 아래와 같은 방식으로 구한다.

우선 시점 좌표 (camera position), 바라보는 물체 (초점) 좌표 (target position), up vector 가 주어진다.

up vector는 카메라의 기울기 (orientation) 을 의미한다.

 

1. z축

z축은 시점 좌표와 초점 좌표를 이은 시선 벡터이다.

camera position - traget posisoin 이 z축이 된다.

 

2. y축

y축은 카메라의 기울기인 up vector 가 그대로 사용된다.

 

3. x축

x축은 위에서 구한 y축과 z축의 외적이다.

 

따라서 뷰 행렬을 구하는 함수는 아래와 같이 정의되어 있다.

 

위 정보를 입력하면 아래와 같은 뷰 행렬이 만들어진다.

 

여기에서 R, U, D 의 의미는 각각 아래와 같다.

왜 위치에는 음수가 붙고, 좌표축은 세로줄이 아니라 가로줄로 쓰일까?

그 이유는 카메라의 위치를 옮기고 회전시키는 행위를 볼 때, 실제로 카메라를 옮기는 것이 아니라, 전체 world 좌표계를 그 반대 방향으로 돌리는 것으로 보고 계산하기 때문이다.

카메라를 왼쪽으로 옮겨서 보는 것은, 상대적으로 world 좌표계를 오른쪽으로 옮겨서 보는 것 과 같다.

 

이를 시각적으로 표현하면 아래와 같다.

 

먼저 카메라의 위치와 초점의 위치를 이용해서 direction (z축)을 구한다.

여기에 up vector를 활용해서 x축을 구한다.

반응형
저작자표시 비영리 변경금지 (새창열림)

'CS > HCI 윈도우즈프로그래밍' 카테고리의 다른 글

[Computer Vision] 1. introduction  (0) 2024.05.29
중간고사 최종 정리  (1) 2024.04.22
[OpenGL] 17. Transformation (5) - Projection & Perspective Normalization  (0) 2024.04.20
[OpenGL] 16. Transformation (4) - 셰이더에 행렬 변환 적용하기  (1) 2024.04.19
[OpenGL] 15. Transformation (3) - GLM 사용하기  (0) 2024.04.19
'CS/HCI 윈도우즈프로그래밍' 카테고리의 다른 글
  • [Computer Vision] 1. introduction
  • 중간고사 최종 정리
  • [OpenGL] 17. Transformation (5) - Projection & Perspective Normalization
  • [OpenGL] 16. Transformation (4) - 셰이더에 행렬 변환 적용하기
에버듀
에버듀
개발은 좋은데 뭘로 개발할까
  • 에버듀
    Blog. 에버듀
    에버듀
  • 전체
    오늘
    어제
    • 분류 전체보기 (614) N
      • 개인 프로젝트 (43)
        • 토이 프로젝트 (3)
        • [2020] 카카오톡 봇 (9)
        • [2021] 코드악보 공유APP (22)
        • [2022] 유튜브 뮤직 클론코딩 (9)
        • [2025] 한글 SQL 데이터베이스 (0)
      • 팀 프로젝트 (22)
        • [2020] 인공지능 숫자야구 (4)
        • [2022] OSAM 온라인 해커톤 (10)
        • [2024] GDSC 프로젝트 트랙 (6)
        • [2025] 큰소리 웹 페이지 (2)
      • CS (335)
        • 자료구조 (19)
        • 어셈블리 (41)
        • 멀티미디어응용수학 (7)
        • 컴퓨터 구조 (29)
        • 알고리즘 분석 (4)
        • 컴퓨터 네트워크 (38)
        • 프로그래밍언어론 (15)
        • HCI 윈도우즈프로그래밍 (26)
        • 기초데이터베이스 (29)
        • 운영체제 (23)
        • 오토마타 (24)
        • 문제해결기법 (11)
        • 블록체인 (22)
        • 소프트웨어공학 (21)
        • 기계학습심화 (12)
        • 컴퓨터그래픽스와 메타버스 (8)
        • 분산시스템특론 (6)
      • 자기계발 (44)
        • 생각 정리 (22)
        • 대외활동 (11)
        • 동아리 (7)
        • 자격증 (3)
        • 머니 스터디 (1)
      • 알고리즘 (PS) (107)
        • BOJ (101)
        • Programmers (5)
        • 알고리즘 이모저모 (1)
      • WEB(BE) (8) N
        • express.js (1)
        • Spring & Spring Boot (7) N
      • WEB(FE) (2)
        • html, css, js (1)
        • React.js (1)
      • Tool & Language (6)
        • Edit Plus (1)
        • Git (1)
        • Python3 (2)
        • Java (2)
      • Infra (12)
        • AWS (1)
        • Oracle Cloud (8)
        • Firebase (2)
        • Network (1)
      • Android (18)
        • Java (6)
        • Flutter (12)
      • Window (2)
        • Visual Studio 없이 WPF (1)
        • MFC (1)
      • 독서 (14)
        • Inside Javascript (7)
        • Database Internals (6)
        • 한 글 후기 (1)
  • 링크

    • github
    • website
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
에버듀
[OpenGL] 18. Transformation (6) - View Change (VCS)
상단으로

티스토리툴바