경계면 표현(Boundary Surface Representation)
그래픽에서 물체 표면만 표현하는 방법
이 표면을 메시(Mesh)라고 함
표면 메시(Surface Mesh), 다각형 메시(Polygon Mesh),
표면 다각형(Surface Polygon), 다각형(Polygon)
표면 메시에 사용되는 다각형은 삼각형 또는 사각형
사각형 메시(Rectangular Mesh): 평면 보장 못함
삼각형 메시(Triangular Mesh): 평면 보장, 다각형 수는 2배
주로 삼각형 메시를 사용함
와이어 프레임과 솔리드 렌더링
와이어 프레임(Wire Frame)
드로잉 속도가 빠름, 겹쳐진 부분의 확인이 가능
솔리드 렌더링(Solid Rendering)
와이어 프레임의 렌더링 속도가 느리다면,
가끔씩 솔리드 렌더링으로 외형 확인
최신 하드웨어는 솔리드 렌더링도 충분히 빠름
어파인 공간(Affine Space)
단, 점 + 점이 성립하는 하나의 예외 상황이 존재함

어파인 합(Affine Sum): 점의 계수의 합이 1일 때 점의 합이 성립하는 것
동차좌표계: 추가 좌표를 도입하여 평행이동 하는 행렬을 표현하는 기법
[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): 점


문제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차원 회전에 대한 행렬
(암기할 것)

점 = 행렬 * 점
회전의 중심은 항상 원점이다.
z축 중심의 회전에 대한 행렬


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


문제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]

교환법칙은 성립하지 않음

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

S→R→T 순서로 진행됨

|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|
기준의 반사

|0 1 0|
|1 0 0|
|0 0 1|
유사변환(Similarity Transformation)
|2 0 0|
|0 2 0| 와 같은 변환이 균등 변환
|0 0 2|
어파인 변환(Affine Transformation)
원근 변환(Perspective Transformation)

모델 좌표계(Modeling Coordinate System, MCS)
또는 지역 좌표계(Local Coordinate System, LCS)
전역 좌표계(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|
일반적 관점
변환
지엘(GL)의 관점
변환
회전
크기조절
후위곱셈(PostMultiplication)
함수 호출 순서


시점 좌표계(View Coordinate System, VCS)
시점 변환
관찰자의 특성(카메라의 위치, 보는 방향 등)을 입력 받아
전역 좌표를 관찰자 시점의 좌표로 변경
몇 개의 특성(파라미터, 자유도)을 허락할 것인지에 따라 복잡함의 정도가 다름



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를 기준으로 값을 매김