Vertex
기본적인 기하적 구조를 나타내기 위해(무언가를 그리기 위해) vertex를 사용한다.
<pre>glVertex*()</pre> 안에는 vertex의 좌표가 들어간다.
주의사항
- vertetx의 사용은 <pre>glBegin(primitive_type)</pre>과 <pre>glEnd()</pre>사이에 위치해야 한다.
- 정상적으로 앞면을 보기 위해서는 반시계 방향으로 vertex를 그려야 한다.
만약 시계방향으로 그리게 된다면 그건 뒷면을 보는 것이다.
→ 보이는 건 같더라도 엄연히 다른 것이다.
사용 예시
glBegin(GL_TRIANGLES)
glVertex2f(0.0, 1.0)
glVertex2f(-1.0, -1.0)
glVertex2f(1.0, -1.0)
glEnd()
함수 사용 방법
<pre>glVertex*, glColor* </pre>등 이 함수의 뒤의 <pre>*</pre> 부분에는 여러 속성이 붙을 수 있다.
구성 요소의 수, Data type, 인자의 Vector 여부가 추가로 붙는다.
자세한 내용은 아래와 같다.
좌표계 (Coordinate System)
NDC(Normalized Device Coordinate) 이라고 한다.
가운데를 원점으로 삼아서 화면 오른쪽 끝이 1, 왼쪽 끝이 -1이다.
앞면을 기준으로 반시계 방향으로 좌표들이 편성되어야 한다.
예를 들어 다음과 같은 코드를 이용해 삼각형을 그리면 아래의 결과물이 나온다.
glBegin(GL_TRIANGLES)
glVertex2f(0.0, 1.0)
glVertex2f(-1.0, -1.0)
glVertex2f(1.0, -1.0)
glEnd()
Primitive Type
<pre>glBegin(primitive_type)</pre> 함수의 인자로 사용된다.
Primitive에 따라서 vertex가 표현되는 방법(연결되는 방법)이 달라진다.
즉, vertex가 연결되는 방법을 결정한다.
Primitive type에 따른 vertex의 연결 방법은 아래와 같다.
다만 뒤에서 볼때의 모습이다. 앞면에서의 기본은 반시계방향이다.
Vertex의 속성
속성 종류 및 지정 방법
- 좌표 지정 : <pre>glVertex*()</pre>
- 색상 지정 : <pre>glColor*()</pre>
- 법선 벡터 : <pre>glNormal*()</pre>
- texture coordinate : <pre>glTexCoord*()</pre>
OpenGL : State Machine
하나의 상태가 지정되면 그 상태는 새로운 상태가 지정될 때까지 그대로 있는다.
→ 따라서 OpenGL은 State Machine이다.
예를 들어, 삼각형의 좌표를 3개 지정하고 맨 처음에 한번만 색상을 지정한다면, 그 색상은 도형 전체의 색상이 된다.
이후에 색상을 새로 지정하지 않았기 때문이다.
예시 1. 각 vertex마다 색상을 지정한 경우
glClear(GL_COLOR_BUFFER_BIT)
glLoadIdentity()
glBegin(GL_TRIANGLES)
glColor3f(1.0, 0.0, 0.0)
glVertex2f(0.0, 1.0)
glColor3f(0.0, 2.0, 0.0)
glVertex2f(-1, -1)
glColor3f(0.0, 0.0, 1.0)
glVertex2f(1,-1)
glEnd()
예시 2. 색상 한 번만 지정한 경우
glClear(GL_COLOR_BUFFER_BIT)
glLoadIdentity()
glBegin(GL_TRIANGLES)
glColor3f(1.0, 0.0, 0.0)
glVertex2f(0.0, 1.0)
glVertex2f(-1, -1)
glVertex2f(1,-1)
glEnd()
참고
본 포스트는 한양대학교 이윤상 교수님의 수업을 정리한 내용입니다.
출처: 한양대학교 이윤상 교수님 컴퓨터그래픽스 강의 강의자료 - https://cgrhyu.github.io/courses/2022-spring-cg.html
'Computer Science > Computer Graphics' 카테고리의 다른 글
Transformation in 2D (0) | 2021.03.16 |
---|---|
[GLFW] Input handling (0) | 2021.03.13 |
[OpenGL] OpenGL이란? (0) | 2021.03.10 |
[GLFW][실습] import GLFW 에러 해결 방법 (Failed to load GLFW3 shared library.) (0) | 2021.03.09 |
NumPy의 Array (0) | 2021.03.09 |
댓글