일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 컴퓨터 구조
- window programming
- win32
- OpenGL
- 핵심 API로 배우는 윈도우프로그래밍
- 오픈지엘
- 렌더링
- shader programming
- Mesh Processing
- Graphics
- 윈도우 구조
- denoising
- Win32 API
- MFC 윈도우 프로그래밍
- c4d
- 셰이더프로그래밍
- shader
- 베지에 곡선
- 컴퓨터 아키텍쳐
- Geometry Modeling
- 셰이더
- bezier curve
- MFC
- 윈도우
- 윈도우 프로그래밍
- 그래픽스
- modeling
- 그래픽스기초
- 윈도우프로그래밍
- 운영체제
- Today
- Total
오다기리 박의 알고리즘 노트
[OpenGL로 배우는 컴퓨터 그래픽스] Chapter 06. 모델변환과 시점변환 본문
Chapter 06. 모델변환과 시점변환
Section 01. 좌표계
3차원 물체의 표현
메쉬 표현…
벡터 공간
주어진 벡터로부터 파생되는 모든 벡터의 집합
어파인 공간
점을 마치 벡터의 동족처럼 취급함으로써 벡터공간을 확장한 것
좌표축 / 좌표계
기저 벡터끼리는 선형 독립이여야 한다.
차원 : 점의 위치를 표현하기 위한 기저 벡터의 수
좌표 : 각각의 기저 벡터에 곱해지는 계수
좌표계 : 원점과 기저벡터로 구성되는 프레임
동차 좌표
Section 02. 기하변환
기하변환
물체의 이동, 회전, 크기조절 작업
Translation
Rotaion
하나의 객체를 x, y, z축 주위로 각각 ∮라디안만큼 회전시킨다.
Scaling
균등, 차등이 존재
쉬어 변환
점 p가 로 이동
복합변환
효율을 높이기 위함
Reflection
특정 좌표 부호를 반대로 한다
구조왜곡(Structure Deforming)
테이퍼링 (Tapering)
휨(Bending)
비틀림 (Twisting)
변환의 분류
Section 03. GL 모델변환 (Modeling Transformation)
모델좌표계와 전역좌표계
물체의 정점은 물체 하나를 설계할 때의 좌표계 ~ 한 장면에 여러 물체를 모아 놓았을 때의 좌표계 ~ 그 장면을 바라보는 시점에 따른 좌표계 등을 거쳐가며 새로운 좌표값으로 바뀌어 최종적으로 화면에 그려진다.
GL 프로그램 처음 실행 시 전역 좌표계와 모델 좌표계가 일치되어 있음
물체에 변환을 가하면 GL은 전역좌표계를 모델좌표계로 일치시키기 위한 변환을 가하고 이를 기준으로 모델좌표계에서 정의된 물체를 그려낸다.
GL 파이프라인
설계된 물체 또는 그래픽 라이브러리에서 가져온 물체를 장면에 맞도록 기하변환시키는 것을 모델변환(Modeling Transformation)이라고 한다.
변환된 물체를 관찰하기 위해 카메라 위치와 방향을 설정하는 것을 시점변환, 뷰변환(Viewpoint Transformation, View Transformation)이라고 한다.
카메라의 렌즈를 선택하고 촬영하여 물체의 2차원 영상을 필름에 맺히게 하는 것이 투상변환(Projection Transformation)
그렇게 해서 찍혀진 사진의 크기를 줄이거나 늘리는 작업이 뷰포트변환(Viewport Transformation)
행렬의 내용은 프로그램에 의해 결정되지만 저장된 값에 의거하여 최종적인 기하변환을 가하는 것은 GL 파이프라인 프로세서의 몫이다.
모델변환
1. 행렬 모드(Matrix Mode) 설정 : 변환의 종류를 명시
void glMatrixMode(GLenum mode);
2. 행렬 내용 채우기 : 원하는 변환 가하기 (전역좌표계를 기준으로 모델좌표계를 어떻게 변환하는지에 관한 정보를 현 변환행렬에 저장한다.)
void glLoadIdentity(); -> 현 변환행렬이 I로 초기화됨
void glLoadMatrixf(const GLfloat *M); -> 행렬 M을 현 변환행렬로 올린다.
void glMultMatixf(const GLfloat *M); -> 현 변환행렬(후위곱셈)에 M 행렬을 곱한다.
변환작업 자체를 명시
void glTranslatef(GLfloat dx, GLfloat dy, GLfloat dz); -> 모델좌표계를 전역좌표계로부터 이동
void glScalef(GLfloat sx, GLfloat sy, GLfloat sz); -> 모델좌표계 눈금 크기조절
void glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z); -> 모델좌표계를 전역좌표계로부터 반시계방향으로 회전
예)
복합변환에 의한 모델링
물체변환(Object Transformation)
고정된 전역좌표계를 중심으로 물체를 움직이는 것.
일단 이미 물체가 전역좌표계 원점에 그려져 있다고 가정하고 물체를 원하는 곳으로 가져다 놓는 방법.
좌표계변환(Coordinate Transformation)
후위곱셈
모델좌표계를 움직이는 방법.
아직 물체가 그려지지 않은 것으로 가정하고 모델좌표계를 원하는 곳으로 가져다 놓은다음 최종적인 모델좌표계를 기준으로 물체를 그려내는 방법.
GL의 명령어 순서의 기준.
행렬스택
행렬 스택은 모델좌표계가 변해온 과정을 저장하기 위한 것이다.
void glPushMatrix(); -> 현 변환행렬의 복사본을 스택 탑에 삽입하고 그것이 새로운 현 변환행렬이 되게 함.
void glPopMatrix(); -> 스택 탑의 행렬을 삭제함으로써 그 바로 아래있던 이전의 현 변환행렬을 현 변환행렬로 복원함.계층구조 모델링 (Hierarchy Modeling)
순방향 키네마틱스(Forward Kinematics)
계층구조의 상위에서 점차 하위로 내려오면서 사용자가 직접 필요한 만큼의 각도를 지정하여 회전시킴으로써 최종적으로 원하는 자세를 만들어 내는 것
장점 : 사용자 마음대로 필요한 자세를 만들어 낼 수 있다
각 관절마다 회전각을 사용자가 직접 입력해야 한다.
역방향 키네마틱스 (Inverse Kinematics)
계층구조의 가장 아래에 있는 물체 위치를 명시하면 상위 물체의 움직임을 컴퓨터 내부에서 자동으로 계산되게 하는 방법
예) 손이 그 위치에 존재하기 위해 나머지 모든 객체들이 해당 관절을 중심으로 몇 도를 회전해야 하는지에 대한 계산
Section 04. GL 시점변환 (View Transformation)
GL 파이프라인
설계된 물체 또는 그래픽 라이브러리에서 가져온 물체를 장면에 맞도록 기하변환시키는 것을 모델변환(Modeling Transformation)이라고 한다.
변환된 물체를 관찰하기 위해 카메라 위치와 방향을 설정하는 것을 시점변환, 뷰변환(Viewpoint Transformation, View Transformation)이라고 한다.
카메라의 렌즈를 선택하고 촬영하여 물체의 2차원 영상을 필름에 맺히게 하는 것이 투상변환(Projection Transformation)
그렇게 해서 찍혀진 사진의 크기를 줄이거나 늘리는 작업이 뷰포트변환(Viewport Transformation)
행렬의 내용은 프로그램에 의해 결정되지만 저장된 값에 의거하여 최종적인 기하변환을 가하는 것은 GL 파이프라인 프로세서의 몫이다.
시점좌표계 설정
단순 시스템
렌더맨
비행 시뮬레이션
PHIGS, GKS
다양하고 자유로운 카메라 설정이 가능한 카메라 좌표계
GL의 시점좌표계
GL의 시점좌표계는 다음 세 가지 요소에 의해 정의
카메라 위치
카메라가 바라보는 점, 즉 초점(Focus, Target)의 위치
카메라 기울임(Orientation)
뷰행렬과 모델행렬
모델행렬은 전역좌표계를 모델좌표계로 일치시키는 행렬
뷰행렬은 gluLookAt()에 의해 정의된 시점좌표계를 전역좌표계로 일치시키는 행렬void gluLookAt (GLdouble eyex, GLdouble eyey, GLdouble eyez, GLdouble centerx, GLdouble centery, GLdouble centerz, GLdouble upx, GLdouble upy, GLdouble upz);
1. 전역 좌표계 = 시점 좌표계 = 모델 좌표계
2. 시점 좌표계 분리
3. 모델 좌표계 분리
시점 설정(gluLookAt())에 의한 애니메이션
극좌표계(Polar Coordinate System)
극좌표로 표시된 시점의 위치를 모델뷰 행렬에 반영하기
조종사 눈에 보이는 광경을 촬영
'컴퓨터 그래픽스 > OpenGL' 카테고리의 다른 글
[OpenGL로 배우는 컴퓨터 그래픽스] Chapter 08. 가시성 판단 (Visibility Detection) (0) | 2019.02.14 |
---|---|
[OpenGL로 배우는 컴퓨터 그래픽스] Chapter 07. 투상변환과 뷰포트변환 (0) | 2019.02.14 |
[OpenGL로 배우는 컴퓨터 그래픽스] Chapter 05. 오픈지엘 기본 틀 (0) | 2019.02.14 |
[OpenGL로 배우는 컴퓨터 그래픽스] Chapter 04. 오픈지엘 API (0) | 2019.02.14 |
[OpenGL로 배우는 컴퓨터 그래픽스] Chapter 03. 그래픽 컬러처리 (0) | 2019.02.14 |