Contents
- 1. <대단� 1>. openGL기본 학습
- 1.1. Chapter 1.OpenGL�서 3D그래픽 기본지�
- 1.1.1. �핑(popping)현�
- 1.1.2. 랜�� & 랜�(render)
- 1.1.3. �근법
- 1.1.4. 색ìƒ�ê³¼ 조명 ,그림ìž� ê·¸ë¦¬ê³ ì‰�ì�´ë”©
- 1.1.5. �스� 맵핑
- 1.1.6. 블랜딩
- 1.1.7. 안티 알리어싱
- 1.1.8. 실시간 3D & 비실시간 3D
- 1.1.9. 즉시모드와 보류모드(씬그래프)
- 1.1.10. 좌표체계
- 1.1.11. 뷰�트(viewport)와 �리핑(clipping)
- 1.1.12. �� 투�과 �근 투�
- 1.2. Chapter 2. openGL� 사용
skyLibrary_inclue
1. <대단ì›� 1>. openGL기본 학습 ¶
Intro
ì�´ 페ì�´ì§€ëŠ” 위키를 연습?í• ê²¸ ì œê°€ í˜„ì œ 공부중ì�¸ openGLë‚´ìš©ì�„ ì •ë¦¬í•˜ê¸° 위한 페ì�´ì§€ìž…니다. 혹시 openGLì�„ 공부하시는 분들ì�€ ì°¸ê³ í•˜ì…”ì„œ ë�„움ì�´ ë�˜ë©´ ì¢‹ê² ìŠµë‹ˆë‹¤.
공부하는 ë�„서는 openGL superbible 3íŒ� 번ì—서 + openGL Game programming ë‘�권으로 í•˜ê³ ìžˆìŠµë‹ˆë‹¤. 아마 openGL superbibleì�€ ì�´ë²ˆë‹¬ì—� 5íŒ� ì›�서가 해외ì—�서 나오는 걸로 ì•Œê³ ìžˆëŠ”ë�°, ì�´ê±¸ 보시는 ë¶„ì�€ ì°¸ê³ í•´ì„œ ì›�서를 보는것ë�„
나�지 않겟네요.
ì�´ 페ì�´ì§€ëŠ” 위키를 연습?í• ê²¸ ì œê°€ í˜„ì œ 공부중ì�¸ openGLë‚´ìš©ì�„ ì •ë¦¬í•˜ê¸° 위한 페ì�´ì§€ìž…니다. 혹시 openGLì�„ 공부하시는 분들ì�€ ì°¸ê³ í•˜ì…”ì„œ ë�„움ì�´ ë�˜ë©´ ì¢‹ê² ìŠµë‹ˆë‹¤.
공부하는 ë�„서는 openGL superbible 3íŒ� 번ì—서 + openGL Game programming ë‘�권으로 í•˜ê³ ìžˆìŠµë‹ˆë‹¤. 아마 openGL superbibleì�€ ì�´ë²ˆë‹¬ì—� 5íŒ� ì›�서가 해외ì—�서 나오는 걸로 ì•Œê³ ìžˆëŠ”ë�°, ì�´ê±¸ 보시는 ë¶„ì�€ ì°¸ê³ í•´ì„œ ì›�서를 보는것ë�„
나�지 않겟네요.
1.1. Chapter 1.OpenGLì—�서 3D그래픽 기본지ì‹� ¶
- openGLì�„ ê³µë¶€í•˜ê¸°ì „ì—� ì�´ì—� 필요한 간단한? 용어와 ê°œë…�ì�„ 간단히 ì •ë¦¬í•˜ê³ ë“¤ì–´ê°‘ì‹œë‹¤.
1.1.1. íŒ�í•‘(popping)현ìƒ� ¶
- 핵심 ì •ë¦¬ : 2ì°¨ì›� ìƒ�ì—�서 3ì°¨ì›� 물체를 í‘œí˜„í• ë•Œ 앞면과 ë’·ë©´ì�´ 바뀌어서 ë³´ì�´ëŠ” 현ìƒ�ì�„ íŒ�í•‘ 현ìƒ�ì�´ë�¼ê³ 부른다.
: example : ì •ìœ¡ê°�형ì�„ 그릴때 ëª¨ë“ ë³€ì�„ 그린다면 우리는 ë’·ë©´ê³¼ 앞면ì�„ ì°©ê°�해서 ë³¼ 수 있다. 왜ëƒ�하면 ë’·ë©´ì—� 해당하는 ì„ ë“¤ì�´ 앞쪽ì—� 위치한 ì„ ìœ¼ë¡œ ì°©ê°�í• ìˆ˜ 있기 때문ì�´ë‹¤.
ì�´ëŸ° íŒ�핑현ìƒ�ì�€ 3ì°¨ì›�ì �ì�¸ 표현ì�„ 방해한다. ê³ ë¡œ 보통 ì�´ë¥¼ ì œê±°í•˜ê¸°ìœ„í•´ì„œ ë’·ë©´ì�„ 그리는 ì„ ì�„ ì œê±°í•˜ì—¬ 3ì°¨ì›�ì �ì�¸ 표현ì�„ ë�” ìƒ�ìƒ�하게 한다. ì�´ë ‡ê²Œ ë’·ë©´ì�˜ ì„ ì�„ ì œê±°í•˜ëŠ” ë°©ì‹�ì�„ ì�€ë©´ì œê±° 혹ì�€ 숨겨진 표면 ì œê±°ë�¼ê³ 한다.
�핑 현�� 예시


[PNG image (11.89 KB)]
ì�€ë©´ì œê±° 예시


[PNG image (10.91 KB)]
1.1.2. ëžœë�”ë§� & ëžœë�”(render) ¶
- í•µì‹¬ì •ë¦¬ : 3ì°¨ì›� 사물ì—� 대한 ì •ë³´ë¥¼ ê°€ì§€ê³ í™”ë©´(2ì°¨ì›�)ì—� 표시하는 것ì�„ ëžœë�”(render)한다ë�¼ê³ ë§�í•˜ê³ ëžœë�”ë§�ì�´ë�¼ê³ 한마디로 ë§�한다.
1.1.3. ì›�근법 ¶
컴퓨터화면ì�€ 2ì°¨ì›�ì�´ë‹¤. 하지만 우리가 3D게임ì�„ í• ë•Œ ë³´ë©´ ê·¸ 내용물ì�€ 마치 3ì°¨ì›�ì�˜ 물체처럼 ë³´ì�¸ë‹¤. 하지만 ì‹¤ì œë¡œëŠ” 내용물ì�€ 2ì°¨ì›�ì �ì�¸ 것ì�„ 3ì°¨ì›�처럼 ë³´ì�´ê²Œ ë§Œë“ ê²ƒë¿�ì�´ë‹¤. ê·¸ë ‡ë‹¤ë©´ 어떻게 2ì°¨ì›�ì �ì�¸ê²ƒì�„ 3ì°¨ì›�ì �ì�¸ê²ƒì²˜ëŸ¼ ë³´ì�´ê²Œ 만들 수 있ì�„까? 여러가지 방법ì�´ 잇지만 그중ì—� 하나는 ì›�근법ì�„ 사용한다는 것ì�´ë‹¤. ì›�근법ì�´ëž€ 가까히 있는 것ì�€ í�¬ê²Œ 멀리있는것ì�€ 조그마하게 표현하는것ì�„ ë§�한다. ë�” ì •í™•ížˆ ë§�하ìž�ë©´ ì„ ì‚¬ì�´ì�˜ ê°�ë�„를 ì¡°ì ˆí•˜ì—¬ 3ì°¨ì›�효과를 내는 기법ì�„ ë§�한다.
ì›�근법ì�˜ 대표ì �ì�¸ 예로는 우리가 수학ì�„ 배울때 쉽게 보는 ì •ìœ¡ê°�형 그림ì�´ë‹¤.
ì›�근법ì�˜ 대표ì �ì�¸ 예로는 우리가 수학ì�„ 배울때 쉽게 보는 ì •ìœ¡ê°�형 그림ì�´ë‹¤.
1.1.4. 색ìƒ�ê³¼ 조명 ,그림ìž� ê·¸ë¦¬ê³ ì‰�ì�´ë”© ¶
3ì°¨ì›�ì �ì�¸ 요소를 ë�” ë‘�드러지게 표현하기 위해서는 ì‰�ì�´ë”©ì�„ 사용하면 ë�œë‹¤. ì‰�ì�´ë”©ì�´ëž€ ìž…ì²´ì �ì�¸ 물체ì—� ì�Œì˜�ì�´ë‚˜ 색ìƒ� ë°�기 등ì�„ 잘 ì¡°ì ˆí•˜ì—¬ 표면ì—� 입히는 기법ì�„ ë§�한다. ì�´ëŸ° 기법ì�„ 통해서 ì •ìœ¡ê°�형같ì�€ 경우는 ê°� ë©´ì�„ ë�„드ë�¼ì§€ê²Œ í‘œí˜„í• ìˆ˜ ìžˆê³ , ë�”ìš± 실ê°�나는 3ì°¨ì›�ì �ì�¸ 표현ì�„ 가능케 한다.

[PNG image (12.08 KB)]
1.1.5. í…�스ì³� 맵핑 ¶
지오메트리(ë�„형)ì�´ ì¦�가하면 ì¦�ê°€í• ìˆ˜ ë¡� 그래픽하드웨어ì—�서 ì²˜ë¦¬í•´ì•¼í• ì�¼ë“¤ì�€ 많아진다. 만약 ì�´ë ‡ê²Œ ë§Žì�€ 지오메트리(ë�„형)ì�„ ì�¼ì�¼ížˆ ì‰�ì�´ë”© 작업ì�„ 한다면 실시간 작업ì�´
필요한 경우ì—�는 ì†�ë�„ì €í•˜ì—� 대한 ë¬¸ì œê°€ ë°œìƒ�í• ìˆ˜ê°€ 있다. ì�´ëŸ°ì �ì—�서 í…�스ì³� 맵핑ì�€ 훌ë¥í•œ 대안책ì�´ ë� 수 있다. '''í…�스ì³� 맵핑ì�´ëž€ ê°� ìž…ì²´ 표면ì—� 미리준비해둔 ì�´ë¯¸ì§€ë¥¼
입히는 것ì�„ ì�´ì•¼ê¸°í•œë‹¤. 여기서 준비해둔 ì�´ë¯¸ì§€ë¥¼ í…�스ì³�ë�¼ê³ 부르며, í…�스ì³�ì�˜ ê°� 요소를 í…�ì…€ , ì�´ëŸ° í…�ì…€ì�„ 물체ì�˜ 표면ì—� ë§žì¶° 입히는 작업ì�„ í•„í„°ë§�'''
ì�´ë�¼ê³ 부른다.
필요한 경우ì—�는 ì†�ë�„ì €í•˜ì—� 대한 ë¬¸ì œê°€ ë°œìƒ�í• ìˆ˜ê°€ 있다. ì�´ëŸ°ì �ì—�서 í…�스ì³� 맵핑ì�€ 훌ë¥í•œ 대안책ì�´ ë� 수 있다. '''í…�스ì³� 맵핑ì�´ëž€ ê°� ìž…ì²´ 표면ì—� 미리준비해둔 ì�´ë¯¸ì§€ë¥¼
입히는 것ì�„ ì�´ì•¼ê¸°í•œë‹¤. 여기서 준비해둔 ì�´ë¯¸ì§€ë¥¼ í…�스ì³�ë�¼ê³ 부르며, í…�스ì³�ì�˜ ê°� 요소를 í…�ì…€ , ì�´ëŸ° í…�ì…€ì�„ 물체ì�˜ 표면ì—� ë§žì¶° 입히는 작업ì�„ í•„í„°ë§�'''
ì�´ë�¼ê³ 부른다.
1.1.6. 블랜딩 ¶
블랜딩(blending)�란 화면�� 색�과 물체를 혼합하는 효과를 �야기한다. �를 사용하는 곳� 주로 � �미지가 겹�있는 효과를 내기위해서 사용한다. 예를 들어
거울ì—� 비치는 내모습ì�„ í‘œí˜„í• ë•Œë¥¼ ìƒ�ê°�í•´ë³´ë©´ 거울ì�´ë�¼ëŠ” ì�´ë¯¸ì§€ì™€ ë‚´ 얼굴ì�´ 비치는 ì�´ë¯¸ì§€ë¥¼ 합치는 효과를 ìƒ�ê°�하면 ë�œë‹¤(반사효과).
거울ì—� 비치는 내모습ì�„ í‘œí˜„í• ë•Œë¥¼ ìƒ�ê°�í•´ë³´ë©´ 거울ì�´ë�¼ëŠ” ì�´ë¯¸ì§€ì™€ ë‚´ 얼굴ì�´ 비치는 ì�´ë¯¸ì§€ë¥¼ 합치는 효과를 ìƒ�ê°�하면 ë�œë‹¤(반사효과).
1.1.7. 안티 알리어싱 ¶
컴퓨터는 기계어ë�¼ëŠ” 언어ë�¼ëŠ” ì�´ì§„ì �ì�¸ 표현(ì�´ì§„법ì �ì�¸ 표현)ì�„ 사용한다. 한마디로 1011001ê³¼ ê°™ì�€ 표현ì�„ 예시로 들 수 있는ë�°, ì�´ 때문ì—� ì—°ì†�ì �ì�¸ 표현ì�„ 실질ì �으로 표현
하는것ì�´ 불가능하다. ì„ ì�„ ê·¸ë¦°ë‹¤ê³ ë³´ë©´ ì�´ëŠ” ì �들ì�˜ ì§‘í•©ì—� í•´ë‹¹í• ë¿�ì�´ê³ , ë³´ì�´ê¸°ì—� ì„ ì�¼ ë¿�ì�´ì§€ ì �들ì�˜ 조밀한 ì§‘í•©ì—� 불가하다. ê·¸ë¦¬ê³ ì»´í“¨í„°ì—�서ì�˜ ì �ì�˜
표현ì�€ 사ê°�형ì�˜ ì �으로 표현ì�´ë�˜ëŠ”ë�° ê·¸ ì�´ìœ 는 ì—°ì†�ì �ì�¸ 표현ì�´ 불가한 컴퓨터로서는 ì™„ì „ížˆ ë�™ê·¸ëž—게 ì�´ì–´ì§„ ì›�ì�„ 그리기ì—�는 실수표현ì—� 한계가 있기 때문ì�´ë‹¤.(무한 소수ì�˜
표현ì�´ ë¶ˆê°€í•˜ë‹¤ê³ í•˜ëŠ”ê²Œ ë�” 옳ì�„ 수ë�„ 있겟다.) 그래서 사ê°�형으로 표현ë�˜ì–´ì§€ëŠ” ì �으로 ì›�ì�„ 그리게ë�˜ë©´ 계단현ìƒ�ì�´ ì�¼ì–´ë‚œ ì›�ì�„ 보게 ë� 것ì�´ë‹¤. 안티 알리어싱ì�€ ì�´ëŸ¬
란 계단현�� 부드럽게 표현해주는 방법� �한다.
하는것ì�´ 불가능하다. ì„ ì�„ ê·¸ë¦°ë‹¤ê³ ë³´ë©´ ì�´ëŠ” ì �들ì�˜ ì§‘í•©ì—� í•´ë‹¹í• ë¿�ì�´ê³ , ë³´ì�´ê¸°ì—� ì„ ì�¼ ë¿�ì�´ì§€ ì �들ì�˜ 조밀한 ì§‘í•©ì—� 불가하다. ê·¸ë¦¬ê³ ì»´í“¨í„°ì—�서ì�˜ ì �ì�˜
표현ì�€ 사ê°�형ì�˜ ì �으로 표현ì�´ë�˜ëŠ”ë�° ê·¸ ì�´ìœ 는 ì—°ì†�ì �ì�¸ 표현ì�´ 불가한 컴퓨터로서는 ì™„ì „ížˆ ë�™ê·¸ëž—게 ì�´ì–´ì§„ ì›�ì�„ 그리기ì—�는 실수표현ì—� 한계가 있기 때문ì�´ë‹¤.(무한 소수ì�˜
표현ì�´ ë¶ˆê°€í•˜ë‹¤ê³ í•˜ëŠ”ê²Œ ë�” 옳ì�„ 수ë�„ 있겟다.) 그래서 사ê°�형으로 표현ë�˜ì–´ì§€ëŠ” ì �으로 ì›�ì�„ 그리게ë�˜ë©´ 계단현ìƒ�ì�´ ì�¼ì–´ë‚œ ì›�ì�„ 보게 ë� 것ì�´ë‹¤. 안티 알리어싱ì�€ ì�´ëŸ¬
란 계단현�� 부드럽게 표현해주는 방법� �한다.
계단 현� 그림


[PNG image (13.94 KB)]
1.1.8. 실시간 3D & 비실시간 3D ¶
- 실시간 3D는 ë§�그대로 사용ìž�ê°€ 화면 구성ì—� 필요한 ë�°ì�´í„°ë¥¼ ìž…ë ¥ 즉시 화면ì—� ë°˜ì˜�하는 ë°©ì‹�ì�„ ì�´ì•¼ê¸°í•œë‹¤. 예를 들어 비행기 ì‹œë®¬ë ˆì�´ì…˜ 프로그램ì�´ë�¼ë�˜ê°€, 게임ì�„ 예시로 들 수 있다.
- 비실시간 3D는 반대로 미리 구성해둔 3Dì�´ë¯¸ì§€ë¥¼ 화면ì—� 보여주는 ë°©ì‹�ì�„ ì�´ì•¼ê¸°í•œë‹¤. 예시로는 ì• ë‹ˆë§¤ì�´ì…˜ì�´ë‚˜ ì˜�화를 들 수 ìžˆê² ë‹¤. ê³ í’ˆì§ˆ 3Dì�´ë¯¸ì§€ê°™ì�€ 경우는 ì�´ë¥¼ ëžœë�”ë§�í•˜ê³ êµ¬ì„±í•˜ëŠ”ë�°ì—�ë§Œ í•´ë�„ 몇시간ì�´ 걸릴 ì •ë�„로 ë§Žì�€ 시간ì�´ 소요ë�˜ëŠ”ë�°, ì�´ë¥¼ 위한게 미리 3Dì�´ë¯¸ì§€ë¥¼ 구성해ë‘�ê³ í™”ë©´ì—� ë�„워주면 즉시 화면ì—� 보여줄 수 있어서 마치 실시간 ëžœë�”ë§�한 것 처럼 보여줄 수 있다.
1.1.9. 즉시모드와 보류모드(씬그래프) ¶
실시간 3D 그래픽� 위한 API 프로그래� 방��는 즉시모드와 보류모드 �가지 방법� 있다.
- 보류모드란, apiìƒ�ì—�서 미리 ì–´ë–¤ 기본ì �ì�¸ ë�„형ì�˜ 구성방ì‹�ì�´ë‚˜ 처리방ì‹�ì�´ ë‚´ë¶€ì �으로 ì •í•´ì ¸ìžˆëŠ” ìƒ�태ì—�서 ë�„형ì�„ 구성하는 ë�°ì�´í„°ë¥¼ API ë˜�는 툴킷ì—� ì œê³µí•¨ìœ¼ë¡œì�¨ ë�„형ì�„ 구성(ì�´ë¯¸ì§€ 구성)하는 ë°©ì‹�ì�„ ì�´ì•¼ê¸°í•œë‹¤. 장면내ì�˜ ëª¨ë“ ë¬¼ì²´ë“¤ê³¼ ê·¸ 사ì�´ì�˜ 관계를 미리 만들어진 ë�°ì�´í„° 구조로 만들어ë‘�는것ì�„ 씬그래프(scene graph)ë�¼ 한다.
- 즉시모드란, 그래픽 프로세서ì—� ì§�ì ‘ì �ì�¸ ëª…ë ¹ì�„ ì „ë‹¬í•´ì„œ ìƒ�태를 변경시켜 ì�´ì–´ì§€ëŠ” ëª¨ë“ ëª…ë ¹ì—� ê·¸ ìƒ�태를 ë°˜ì˜�하는 ë°©ì‹�ì�„ ì�´ì•¼ê¸°í•œë‹¤. ì�´ ë°©ì‹�ì�€ 위ì—�서 언급한 씬그래프ì—� APIì�˜ ë‚´ë¶€ì �ì�¸ ë�™ìž‘ì—�ë�„ ì�´ ë°©ì‹�ì�´ ì“°ì�¸ë‹¤. 즉시모드ì—�서 ì�´ë¯¸ 실행ë�œ ëª…ë ¹ì�€ ê·¸ 다ì�Œ ëª…ë ¹ì—� ì˜�í–¥ì�„ 받지 않는ë�° 예를 들ìž�ë©´ 화면ì—� 하늘ì—� 대한 í�´ë¦¬ê³¤ì�„ í…�스ì³�를 입힌뒤 ì�´ í…�스ì³� ìƒ�태를 í•´ì œí•˜ê³ , ë•…ì—� 조명효과ì—�를 주기 위해 조명효과 ìƒ�태를 변경시킨다면, 화면ì—�는 하늘ì—� 미리 구성ë�œ í…�스ì³�ì—�는 변함ì�´ 없으며 하늘ì—� 조명효과가 ë°˜ì˜�ì�´ ë�˜ê³ ë•…ì�€ í…�스ì³� ìƒ�태가 ë°˜ì˜�ì�´ 안ë�˜ê³ 조명효과ì—� 대한 것만 ë°˜ì˜�ì�´ ë� 것ì�´ë‹¤.
1.1.10. 좌표체계 ¶
- 화면ì�„ 구성하는 좌표방ì‹�ì�€ 우리가 보통사용하는 ì§�êµ�좌표계(ë�°ì¹´ë¥´íЏ 좌표계)ë§�ê³ ë�„ 여러가지가 있다. ì�´ 좌표체계ì—� ë”°ë�¼ì„œ ì�´ë¯¸ì§€ 구성하는 ë°©ì‹�ë�„ ì™„ì „ížˆ 달ë�¼ì§ˆ 수 있어서 ì�´ë¥¼ 잘 ê³ ë ¤í•´ì„œ ì„ íƒ�해야한다. 하지만 지금 우리는 ì�¼ë‹¨ ì§�êµ�좌표계를 ê°€ì§€ê³ ë…¼í•´ë³¼ 것ì�´ë‹¤.
1.1.11. ë·°í�¬íЏ(viewport)와 í�´ë¦¬í•‘(clipping) ¶
- í�´ë¦¬í•‘ì�´ëž€, 우리가 화면ì—� ì�´ë¯¸ì§€ë¥¼ 그리기 위해서는 openGLì—�게 화면ì�˜ 좌표 기준ì�„ ì•Œë ¤ì¤„ 필요가 있는ë�°, openGLì—�게 화면 좌표계 ì˜�ì—ì�„ ì •í•´ì£¼ëŠ” 것ì�„ í�´ë¦¬í•‘ì�´ë�¼ê³ 한다.
: example) ì§�사ê°�형 좌측하단 (0.0) ~ ì§�사ê°�형 우측 ìƒ�단(100,100) 좌표로 구성ë�˜ëŠ” ì§�사ê°�형모양ì�˜ 좌표계를 í�´ë¦¬í•‘한다ë�¼ê³ ë³´ë©´ ì�´ 좌표계 ì˜�ì—ì�€ 중심ì�´ (50,50)ì�¸ í�´ë¦¬í•‘ ì˜�ì—ì�´ë�¼ê³ 한다. 만약 좌표중심ì�„ (0,0)으로 ë§Œë“¤ê³ ì‹¶ë‹¤ë©´ xì¶•ê³¼ yì¶•ì�˜ +ì˜�ì—좌표와 -ì˜�ì—좌표를 대ì¹í˜•으로 만들어야한다.
- ë·°í�¬íŠ¸ëž€, 화면ì�˜ 좌측 하단ì�´ 0,0으로 기준ì�„ ë‘�ê³ ìš°ë¦¬ê°€ 눈으로 보는 윈ë�„ìš° ì°½ì—�서 ìž„ì�˜ì�˜ í�¬ê¸°ë¥¼ í• ë‹¹í•´ì„œ ì�´ë¯¸ì§€ 작업ì�„ í• ìˆ˜ 있는 화면ì—�서ì�˜ 실질ì �ì�¸ ì�´ë¯¸ì§€ 작업 ì˜�ì—를 ì�´ì•¼ê¸°í•œë‹¤. í�´ë¦¬í•‘ê³¼ 연관지어 ì�´ì•¼ê¸°í•˜ë©´, í�´ë¦¬í•‘ì�„ 화면ì—� ì �용시키는 ì˜�ì—으로 ë§�í• ìˆ˜ 있겟다. ì�´ ë·°í�¬íŠ¸ëŠ” 보통 ì°½ ì „ì²´ë¥¼ ì„¤ì •í•´ë‘�ê³ ìž‘ì—…í•˜ì§€ë§Œ, 특수한 경우 화면ì�˜ 구성ì�„ 서로 다른 ì�´ë¯¸ì§€ë¡œ 구성해야한다면, ë·°í�¬íŠ¸ë¥¼ 나누어서 ìž‘ì—…í• ìˆ˜ 있다.
1.1.12. ì§�êµ� 투ì˜�ê³¼ ì›�ê·¼ 투ì˜� ¶
- ê³ ë“±í•™êµ� 기하와 백터단ì›�ì�„ 배울 때 projection(투ì˜�)ì�„ ë°°ì› ì�„ 것ì�´ë‹¤. ì�´ë•Œ ë°°ìš´ 투ì˜�ì�´ëž€, ì§�êµ� 투ì˜�으로 2ì°¨ì›�으로 구성ë�œ ë©´ì—� 수ì§�한 ì¶•ì�„ 기준으로 ë�„형ì�„ 구성하는 ì �들ì�„ 면으로 수ì§�하게 내리는 것ì�„ ë§�한다. ì§�êµ�투ì˜�ì�˜ 특징ì�€ 물체가 멀리있는가 없는가ì—� ìƒ�관없ì�´ ê°™ì�€ í�¬ê¸° 비율로 표현ì�´ ë�œë‹¤ëŠ” ì �ì�´ë‹¤.
- ì›�ê·¼ 투ì˜�ì�€ 가까ì�´ 있는가 멀리있는가ì—� 대한 표현ì�„ 가능케하는 비율ì�„ ì �용한 투ì˜�으로 한ì �ì—�서 í�¼ì§€ëŠ” ë¹›ì�„ ìƒ�ê°�하면 쉽게 알 수 있다.

[PNG image (14.54 KB)]
1.2. Chapter 2. openGLì�˜ 사용 ¶
- ë“¤ì–´ê°€ê¸°ì „ì—� openGLì�€ 프로그래ë°� 언어가 아닌 그래픽 하드웨어 ì œì–´ë¥¼ 위한 소프트웨어 ì�¸í„°íŽ˜ì�´ìФì�´ë‹¤. ê·¸ë¦¬ê³ ë†’ì�€ ì�´ì‹�성ì�„ 지닌 그래픽&모ë�¸ë§� ë�¼ì�´ë¸ŒëŸ¬ë¦¬ì�´ë‹¤. 다시ë§�í•´, OpenGLì�€ 언어가 아닌 APIì�´ë‹¤.
1.2.1. OpenGLì�˜ ìž‘ë�™ë°©ì‹� ¶
- openGL� 내부는 �태들� 변화를 통해서 작�하는 기계�태로 �작한다.
- openGLì—�는 창관리, ìƒ�호 작용 ì�¸í„°íŽ˜ì�´ìФì—� 대한 ì–´ë–¤ 함수ë�„ 없다. ì�´ëŠ” ì�¼ë°˜ì �ì�¸ 임플리먼테ì�´ì…˜(ì§€ì •ë�œ 규약ì�„ 구현한 구현체)ì—� ì �용하기 위해서ì�´ë‹¤. Macì�´ë‚˜ 리눅스 윈ë�„ìš° ê°�ê°� 환경ì—� 대해서 모ë‘� ì ‘ê·¼ì�´ 가능케 하기위함ì�´ë�¼ê³ 간단히 ë§�í• ìˆ˜ 있다.
- ì�¼ë°˜ ì �ì�¸ 임플리먼테ì�´ì…˜ì�´ë�¼ëŠ” 용어를 약간 ìž�세히 설명하ìž�ë©´ ì�´ ë§�ì�€ 그래픽 ì�´ë¯¸ì§€ë¥¼ ì¶œë ¥í• ìˆ˜ 있는 시스템ì�´ë�¼ë©´ ì–´ë””ë“ ì§€ ì�´ openGLì�„ ì �ìš©í• ìˆ˜ 있어야한다는 걸 함축하는 용어ë�¼ê³ í• ìˆ˜ 있다.
ì°¸ê³ ë¡œ ì�¼ë°˜ì �ì�¸ 임플리먼테ì�´ì…˜ì�€ 소프트웨어 임플리먼테ì�´ì…˜ì�´ë‹¤.
- ê·¸ë ‡ë‹¤ë©´ ì�´ openGLì�€ 구체ì �으로 ì–´ë–¤ì‹�으로 작용하는가? 윈ë�„우를 예시로 들어보ìž�. 윈ë�„ìš° ê°™ì�€ 경우 ì–´ë–¤ 화면ì—� ì�´ë¯¸ì§€ë¥¼ ì¶œë ¥í•˜ë ¤ë©´ GDI(graphic Device Interface)ë�¼ëŠ” 그래픽 장치 ì�¸í„°íŽ˜ì�´ìŠ¤ë¥¼ 통해서 ì¶œë ¥ìž¥ì¹˜ë¡œ ì¶œë ¥ë�°ì�´í„°ë¥¼ ë³´ë‚´ ì¶œë ¥í•œë‹¤.
- openGLì�€ 어플리케ì�´ì…˜ìœ¼ë¡œë¶€í„° êµ¬ì„±í•˜ë ¤ëŠ” ì�´ë¯¸ì§€ì—� 대한 ì •ë³´ë¥¼ 받아 ì�´ë¯¸ì§€ë¥¼ 구성후 ì�´ GDIì—�게 구성한 ì�´ë¯¸ì§€ë¥¼ ë³´ë‚´ ì¶œë ¥ìž¥ì¹˜ê°€ ì�´ë¥¼ ì¶œë ¥í•˜ê²Œë�”한다. 다른 ìš´ì˜�ì²´ì œë�„ 마찬가지로 윈ë�„ìš°ì—�서 GDIì—� 해당하는 부분만 다를ë¿� ê³¼ì •ì�€ 같다.
1.2.2. openGLì�˜ 하드웨어 임플리먼테ì�´ì…˜ ¶
- openGLì�€ 하드웨ì �으로 처리ë�˜ëŠ” 부분ë�„ ìžˆê³ ì†Œí”„íŠ¸ì›¨ì–´ì �으로 처리ë�˜ëŠ” 부분ì�´ìžˆë‹¤. 여기ì—�서 ë§�í•˜ê³ ìž� 하는것ì�€ 하드웨어ì �ì�¸ 것ì�´ë‹¤.
- openGLì�˜ 하드웨어 임플리먼테ì�´ì…˜ì�€ 그래픽 개발사ì—�서 그래픽 카드 드ë�¼ì�´ë²„ 형태로 개발ë�˜ê³ 사용ë�œë‹¤. openGLì�´ íŠ¹ì • 플랫í�¼ì—�서 시작하여 ì�¼ë°˜ì �ì�¸ 플랫í�¼ìœ¼ë¡œ ì „í–¥í•˜ê³ ê°œë°©í™”ë¥¼ 실시했ì�„때 ê°� 그래픽 드ë�¼ì�´ë²„ì—� 대한 openGLì�˜ 개발ì�€ 하드웨어 ì œìž‘ì‚¬ì—�서 ì�´ë£¨ì–´ì ¸ì•¼ í•œë‹¤ê³ ìƒ�ê°�í•˜ê³ ê·¸ë¦¬ 시행했는ë�°, ì�´ëŠ” 매우 ì �합한 ì„ íƒ�ì�´ ë�˜ì—ˆê³ ì�´ë¡œ ì�¸í•´ 하드웨어 임플리먼테ì�´ì…˜ì�€ 그래픽 개발사ì—�서 맡게ë�˜ì—ˆë‹¤.
- 하드웨어ì �ì�¸ ë‚´ìš©ì�„ ì„¤ëª…í•˜ë ¤ë©´ ìš°ì„ openGLì�˜íŒŒì�´í”„ë�¼ì�¸ì—� 대해서 설명해야한다. ê³ ë¡œ ê·¸ 파ì�´í”„ë�¼ì�¸ì—� 대해서 살펴보ìž�.
1.2.3. 파ì�´í”„ë�¼ì�¸ ¶
- ì�´ëŠ” 그림부터 ë³´ì—¬ì£¼ê³ ì„¤ëª…í•˜ê²Ÿë‹¤.

[PNG image (16.11 KB)]
- 1. ìš°ì„ ëª…ë ¹ 버í�¼ì—� openGLëª…ë ¹ì�´ 쌓ì�¸ë‹¤.(vertexë�°ì�´í„°ì™€ í…�스ì³� ë�°ì�´í„°ê°€ 쌓ì�¸ë‹¤.)
1.2.4. ë�°ì�´í„° 타입 ¶
- openGLì�€ ë�°ì�´í„°íƒ€ìž…ì�„ ë‚´ë¶€ì �으로 ì •ì�˜ í•˜ê³ ë‚´ë¶€ì—�서 ì“°ê³ ìžˆë‹¤. ì�´ëŠ” ì—시 ì�¼ë°˜ì �ì�¸ 임플리먼테ì�´ì…˜ì�„ ê³ ìˆ˜í•˜ê¸° 위해서임ì�€ 당연한 사실ì�´ë‹¤.(ê°� 환경마다 ë�°ì�´í„° 형ì‹�ì�´ 다르기 때문ì—� ì�´ë¥¼ 모ë‘�수용하기 위해서는 ìž�ì²´ì �으로 ì •ì�˜í•œ ë�°ì�´í„°í˜•ì‹�ì�„ 쓸 수 ë°–ì—� 없다.)
| <openGLë�°ì�´í„° 타입> | <설명> | <대ì�‘ c언어 ë�°ì�´í„° 타입> | <변수 ì ‘ë‘�ì–´ 규칙> |
| GLbyte | 8비트 ì •ìˆ˜ | signed char | b |
| GLshort | 16비트 ì •ìˆ˜ | short | s |
| GLint, GLsizei | 32비트 ì •ìˆ˜ | long | l |
| GLfloat, GLclampf | 32비트 실수 | float | f |
| GLdouble, GLclampd | 64비트 실수 | double | d |
| GLubyte, GLboolean | 부호없는 8비트 ì •ìˆ˜ | unsigned char | ub |
| GLushort | 부호없는 16비트 ì •ìˆ˜ | unsigned short | us |
| GLuint, GLenum, GLbitfield | 부호없는 32비트 ì •ìˆ˜ | unsigned long | ui |
- openGLì�„ ìƒ�징하는 GLì�„ 앞ì—� 붙히는건 ì�´ë¿�만아니ë�¼ 함수ì—�ë�„ ì �ìš©ë�œë‹¤ëŠ” 사실ì�„ 하나 알아ë‘�ìž�.
1.2.5. 함수 ì�´ë¦„ 규칙 ¶
- 규칙 : <ë�¼ì�´ë¸ŒëŸ¬ë¦¬ ì�´ë¦„><루트 ëª…ë ¹ì–´><(ì„ íƒ�ì �) ì�¸ìž�ì�˜ 수><(ì„ íƒ�ì �)ì�¸ìž� 타입>









