06. 모델 변환과 시점 변환

하이솝·2026년 4월 11일

컴퓨터그래픽스

목록 보기
6/9

학습 목표

  • 어파인 공간을 정의하는 이유를 이해한다.
  • 동차좌표를 정의하는 이유를 이해한다.
  • 이동, 회전, 크기조절 등의 기하변환과 변환행렬을 이해한다.
  • 모델 좌표계, 전역 좌표계, 시점 좌표계의 차이점을 이해한다.
  • 좌표계 변환과 변환 행렬과의 관계를 이해한다.
  • 기하변환 순서와 함수호출 순서의 상관관계를 이해한다.

01. 좌표계

1-1. 3차원 물체의 표현

경계면 표현(Boundary Surface Representation)

  • 그래픽에서 물체 표면만 표현하는 방법

  • 이 표면을 메시(Mesh)라고 함
    표면 메시(Surface Mesh), 다각형 메시(Polygon Mesh),
    표면 다각형(Surface Polygon), 다각형(Polygon)

  • 표면 메시에 사용되는 다각형은 삼각형 또는 사각형
    사각형 메시(Rectangular Mesh): 평면 보장 못함
    삼각형 메시(Triangular Mesh): 평면 보장, 다각형 수는 2배
    주로 삼각형 메시를 사용함

와이어 프레임과 솔리드 렌더링

  • 와이어 프레임(Wire Frame)
    드로잉 속도가 빠름, 겹쳐진 부분의 확인이 가능

  • 솔리드 렌더링(Solid Rendering)
    와이어 프레임의 렌더링 속도가 느리다면,
    가끔씩 솔리드 렌더링으로 외형 확인
    최신 하드웨어는 솔리드 렌더링도 충분히 빠름

1-3. 어파인 공간

어파인 공간(Affine Space)

  • 점과 벡터를 동족처럼 취급함으로써 벡터 공간을 확장
  • 가능한 연산
    벡터와 벡터의 덧셈(뺄셈) = 벡터
    스칼라와 벡터의 곱셈(나눗셈) = 벡터
    점과 벡터의 덧셈(뺄셈) = 점
    예)
    다음 중 가능한 연산은?
    점과 점의 덧셈(X)
    점과 점의 뺄셈(O)

단, 점 + 점이 성립하는 하나의 예외 상황이 존재함

어파인 합(Affine Sum): 점의 계수의 합이 1일 때 점의 합이 성립하는 것

1-5. 동차좌표

동차좌표계: 추가 좌표를 도입하여 평행이동 하는 행렬을 표현하는 기법

[1, 2, 1, 1] → 끝 값이 1이면

3차원 점(1, 2, 1)에 대해
4차원 동차좌표로 사상
동차좌표 (1, 2, 1, 1) = (2, 4, 2, 2) = (3, 6, 3, 3) = (a, 2a, a, a)
동차좌표 (x, y, z, w) => 3차원 좌표 (x/w, y/w, z/w)

예상 문제1)
동차촤표의 점(a, 2a, a, a)가 있을 때, 3차원 공간에서의 원래 점은?
답: (1, 2, 1)
마지막 좌표를 1로 만들면 되므로, 모든 좌표를 a로 나눔

예상 문제2)
동차좌표의 점(3, 6, -9, -3)이 있을 때, 3차원 공간에서의 원래 점은?
답: (-1, -2, 3)


[1, 2, 1, 0] → 끝 값이 0이면 벡터
벡터는 크기와 방향이 같으면 똑같기 때문에 평행이동이 의미가 없기 때문
예)
v = 4V1 + 2V2 + V3  + 0r = (4, 2, 1, 0): 벡터
P = 4V1 + 2V2 + V3 + 1r  = (4, 2, 1, 1): 점

02. 기하 변환

  • 물체 변환 또는 좌표계 변환의 기본
  • 행렬로 표현됨
  • 이동, 회전, 크기조절 등

2-1. 이동

문제1)
답: [[1, 0, -5], [0, 1, 2], [0, 0, 1]]

문제1)
답: [[1, 0, 0, -5], [0, 1, 0, 2], [0, 0, 1, 0], [0, 0, 0, 1]]

문제2)
답: [-2, 6, 2, 1]

문제3)
답: [[1.1, 0, 0, 0], [0, 1.2, 0, 0], [0, 0, 1.3, 0], [0, 0, 0, 1]]

2-2. 회전

2차원 회전에 대한 행렬
(암기할 것)

점 = 행렬 * 점
회전의 중심은 항상 원점이다.

z축 중심의 회전에 대한 행렬

이하 동일
단, y축은 부호가 다름

2-3. 크기 조절


문제1) (a)가 2배가 되어 (b)가 되는 행렬은?
답:
[X', Y', Z', 1] = [[2, 0, 0, 0], [0, 2, 0, 0], [0, 0, 0, 2], [0, 0, 0, 1]][X, Y, Z, 1]

문제2) x방향으로 3배, y방향으로 4배, z방향으로 -2배가 되는 행렬은?
답:
[X', Y', Z', 1] = [[3, 0, 0, 0], [0, 4, 0, 0], [0, 0, 0, -2], [0, 0, 0, 1]][X, Y, Z, 1]

2-5. 복합 변환

중심점 기준 회전

  • 1) 피벗(회전의 중심점)이 좌표계 원점에 일치하도록 물체를 이동한다.
  • 2) 물체를 원점 기준으로 축 주위로 회전한다.
  • 3) 회전된 물체는 1번에서 이동한 방향의 반대 방향으로 이동한다.
    코드는 3→2→1의 순서로 짤 것

교환법칙은 성립하지 않음

물체 인스턴스
C = T·R·S (P)

S→R→T 순서로 진행됨

2-6 반사

|1  0  0|							|-1  0  0|					|-1  0  0|
|0 -1  0|							| 0  1  0|					| 0 -1  0|
|0  0  1|							| 0  0  1|					| 0  0  1|

y=xy =x기준의 반사

  • x좌표와 y좌표의 값이 서로 바뀜
|0 1 0|
|1 0 0|
|0 0 1|

2-8 변환의 분류

선형변환

  • 어파인 변환 + 원근 변환
  • 선형 조합으로 표시되는 변환
  • 변환을 해도 직선은 직선으로 유지됨
    강체변환(Rigid Body Transformation)
  • 이동변환, 회전변환
  • 물체 자체의 모습은 변하지 않음

유사변환(Similarity Transformation)

  • 강체변환 + 균등 크기조절 변환, 반사변환
|2 0 0|
|0 2 0| 와 같은 변환이 균등 변환
|0 0 2|
  • 물체면 사이의 각이 유지됨
  • 물체 내부 정점 간의 거리가 일정한 비율로 유지됨

어파인 변환(Affine Transformation)

  • 유사변환 + 차등(x, y, z 비율이 다른) 크기조절 변환, 전단변환
  • 물체의 타입이 유지
    직선은 직선으로, 다각형은 다각형으로, 곡면은 곡면으로
  • 평행선이 보존
  • 변환행렬의 마지막 행이 항상 (0, 0, 0, 1)

원근 변환(Perspective Transformation)

  • 두 평행선이 변환 후에 교차할 수 있음
  • 두 직선은 변환 후 직선으로 유지
  • 변환행렬의 마지막 행이 (0, 0, 0, 1)이 아님

03. 지엘의 모델 변환

3-1. 모델 좌표계와 전역 좌표계

모델 좌표계(Modeling Coordinate System, MCS)
또는 지역 좌표계(Local Coordinate System, LCS)

  • 각 물체별로 설계상의 편의를 위주로 설정된 좌표계
    개발자가 임의로 x, y, z좌표의 순서를 바꾸는 등

전역 좌표계(World Coordinate System, WCS)
또는 세계 좌표계

  • 장면 안의 모든 물체를 한꺼번에 일률적으로 아우를 수 있는 기준 좌표

모델 좌표계를 기준으로 만들어진 물체를 전역 좌표계 기준으로 옮기고 싶을 때
행렬변환을 통해 이루어짐

5-4.cpp 코드 참조

변환행렬의 의미

|1 0 0 3|	|2|	  |5|
|0 1 0 2|	|2|	  |4|
|0 0 1 0| x	|0| = |0|
|0 0 0 0|	|1|	  |1|

일반적 관점
변환

  • 변환행렬 T는 WCS 기준으로 물체 정점을 (3, 2, 0)만큼 이동함을 의미
    정점의 이동

지엘(GL)의 관점
변환

  • 변환과 동시에 WCS와 LCS(MCS)이 분리
  • 변환 후에도 MCS 기준의 정점 좌표는 불변
  • 좌표계의 이동으로 간주
  • 전역 좌표계를 (3, 2, 0)만큼 이동하면 모델 좌표계와 일치
  • 전역 좌표계를 모델 좌표계로 일치시키기 위한 것이 변환행렬이다.
    좌표의 이동

회전

  • 행렬에 따라 WCS가 회전하여 MCS가 됨
  • MCS 기준으로 물체가 정의되면 WCS 기준으로 회전한 것처럼 보임

크기조절

  • WCS의 눈금이 변경되어 MCS로 일치됨
  • 이때 MCS 기준의 물체 좌표는 불변
    MCS의 1칸이 WCS의 2칸에 해당하게 됨
  • MCS 기준으로 물체가 정의되면 WCS에서 길어지 것 처럼 보임

3-2 지엘 파이프라인

후위곱셈(PostMultiplication)

  • 새로운 변환은 기존 변환의 뒤쪽에 곱해진다.

3-4 복합 행렬에 의한 모델링

함수 호출 순서

04. 지엘의 시점 변환

시점 좌표계(View Coordinate System, VCS)

  • 관찰자 기준의 좌표계

시점 변환

  • 관찰자의 특성(카메라의 위치, 보는 방향 등)을 입력 받아
    전역 좌표를 관찰자 시점의 좌표로 변경

  • 몇 개의 특성(파라미터, 자유도)을 허락할 것인지에 따라 복잡함의 정도가 다름

4-1 시점 좌표계 설정

렌더맨(Renderman) 시스템

  • 카메라가 바라보는 점 = 초점(Focus, Target)
    카메라는 전역 좌표계(WCS)의 원점이 아닌 다른 점을 바라보아도 됨
  • 초점을 향한 방향이 z축
  • 나머지는 단순 카메라 시스템과 유사
    • 롤링(Roll, Rolling)
    • 초점은 고정한 채, 카메라가 시선 방향인 z축을 기준으로 회전

4-2 지엘의 시점 좌표계


gluLookAt
openGL의 고유 기능이 아닌
수학 계산을 편리하게 하기 위해 추가로 만들어진 라이브러리

void gluLookAt(GLdouble eyex, GLdouble eyey, GLdouble eyez,
GLdouble atx, GLdouble aty, GLdouble atz, GLdouble upx,
GLdouble upy, GLdouble upz);
  • eyex, eyey, eyez: 카메라의 좌표

  • atx, aty, atz: 카메라가 바라보는 물체(초점)의 좌표

  • upx, upy, upz: 카메라의 회전 좌표
    점이 아닌 방향(벡터)을 의미함

세 좌표는 모두 WCS를 기준으로 값을 매김

0개의 댓글