기본 도형
기본 도형의 종류
- 점
- 직선 (선분)
- 삼각형
- 사각형
- 원
기본 도형
- 3D 그래픽스 프로그래밍에서 기본 도형은 복잡한 그래픽 모델들을 표현하기 위해서 필요한 기본 단위이다.
- 대부분의 3D Graphic API에서 Point, Triangle, Line에 대한 기본 구현을 제공한다.
- Triangle : 게임 프로그램에서 대중적인 3D 그래픽 표현 기본 단위.
- Point : 포인트 클라우드를 통해서 3D 그래픽 표현을 진행.
- 3D 오브젝트들은 삼각형으로 이루어져 있다.
Triangle vs Point
게임 프로그래밍에서는 주로 전자를 사용한다.
Point의 경우 AR에서 많이 사용한다.
점과 선 그리기
점의 정의 : 공간상에 위치한 한 지점
픽셀의 정의 : 디지털 이미지의 가장 기본 단위이며, 사각형 모양의 단일 색상요소.
래스터화 (Rasterization) : 한 점을 화면에 표현하는 픽셀로 바꾸는 과정. 화면 좌표계를 통해서 화면에 픽셀을 표현한다.
점 그리기 : 직교 좌표계로 점 표현 > 화면 좌표계로 변환 > 화면 좌표계에서 레스터화.
직선의 정의 : 두 점 사이에 놓여있고 양 끝이 무한히 뻗어 있는 점들의 연속성을 가진 도형
직선 그리기 : 화면 좌표계에서 시작점과 끝점을 지정하고 그 사이를 연속된 픽셀로 그리기.
브레젠험 알고리즘 : 대표적인 직선 그리기 알고리즘. 정수만을 이용하므로 속도가 빠르고, 계산량이 적다.
- 직선을 화면에 그리기 위해서는 두 점의 위치가 필요하다.
- 두 점을 지나는 직선의 방정식 구하기
- y = ax + b (a는 기울기, b는 y절편)
- 기울기 a 구하기
- 브레젠험 알고리즘에서는 x, y축 중에서 변위가 큰 축을 기준으로 1씩 증가시켜 다른 축의 가장 근접한 정수 값을 찾음
- 정수만을 사용하도록 식의 변경이 필요하다.
- 델타 x는 무조건 양수.
- 델타 x와 y는 상수.
- 간격을 알아내기 위하여 Pk+1 - Pk를 해 준다.
삼각형 그리기와 칠하기
삼각형 그리기
- 게임에서 구성되어 있는 오브젝트들은 모델 데이터를 통해서 구성됨.
- 모델 (Model) 데이터는 메쉬 (Mesh) 데이터로 구성.
- 메쉬 (Mesh) 데이터는 폴리곤 (Polygon) 으로 구성.
- Model Data : 오브젝트들의 모습과 색상 정보 포함.
- Mesh Data : 정점 정보와 정점들을 통해 삼각형을 구성하는 연결 정보 포함.
- Polygon은 대부분 그래픽스에서는 삼각형을 칭한다.
- 삼각형은 3개의 점을 기반으로 구성된다.
- 3개의 점을 이용해서 3개의 선분을 직선 그리기로 구현한다.
- V1, V2, V3일 경우 V1V2, V2V3, V3V1을 직선 그리기로 구현한다.
삼각형 단색 칠하기
- 삼각형 내부를 칠하는 방법은 삼각형의 3점을 이용.
- 스캔라인(Scanline) 알고리즘이 대중적이다.
- 삼각형을 이루는 세 점에 대해서 y축을 기준으로 오름차순 정렬.
-> V1, V2, V3에서 정렬 후에는 V3이 높이 값이 가장 높음.
-> 스캔라인 방향은 가로이므로 y축이 1만큼 변할 때 x축의 변화량이 필요하다.
-> 스캔라인 알고리즘의 핵심은 쪼개는 것.
-> 정렬을 한다.
- 삼각형 처리 시 예외상황의 고려가 필요하다.
- y값의 우선 순위는 변하지 않는다.
- 상단 혹은 하단 삼각형에서 구한 Xstart, Xend 두 값 중에 작은 값을 Xleft, 큰 값을 Xright로 대입한다.
- Xleft부터 Xright까지 선분을 그린다.
사각형 그리기와 칠하기
사각형 그리기
- 4개의 점을 이용해서 해당 4개의 선분을 직선 그리기로 구현.
- 입력 값 : 시작점, width, height
사각형 칠하기
- 사각형 단색을 칠할 때는 그리기와 동일하게 4개의 점 확인 필요.
원 그리기와 칠하기
원 칠하기
- 원 단색을 칠할 때는 중심점, 반지름, 색깔 필요.
- 원을 감싸고 있는 사각형 안에 있는 점들이 원 안에 있는지 확인.
- 중심점과 해당 점들의 거리를 반지름과 비교해서 작으면 원 내부.
실습 진행.
'대학생활 > 수업' 카테고리의 다른 글
게임프로그래밍고급 11주차 - Compute Shader (0) | 2023.05.16 |
---|---|
게임기획크리틱 11주차 - 인공지능 (0) | 2023.05.16 |
게임네트워크프로그래밍 10주차 - 턴 방식 게임, 입력 동기화, 객체 직렬화 (0) | 2023.05.15 |
게임레벨디자인기초 9주차 - 엑셀 사용 기초 (0) | 2023.05.11 |
게임음악작곡법 9주차 - 중간고사 시험 (0) | 2023.05.11 |