OpenGL Super Bible 그래픽스 공부하기 - 1. OpenGL 기본개념이해
OpenGL Super Bible 그래픽스 공부하기 - 2. 첫번째 OpenGL 프로그램
OpenGL Super Bible 그래픽스 공부하기 - 2-3. 처음 그리는 삼각형
OpenGL Super Bible 그래픽스 공부하기 - 3. 파이프라인 따라가기 - 1) 쉐이더간 데이터 전달
OpenGL Super Bible 그래픽스 공부하기 - 3. 파이프라인 따라가기 - 2) 테셀레이션
Part 3 파이프라인 따라가기 - 3) 지오메트리 쉐이더
3.4 지오메트리 쉐이더
- 래스터라이저 스테이지 이전 단계에 위치, 개념적으로 마지막 쉐이더 스테이지
- 프리미티브당 한 번 수행되며, 수행되는 프리미티브를 구성하는 모든 버텍스에 대한 입력 버텍스 데이터에 접근 가능
- 프로그래밍을 통해 파이프라인 내 데이터 흐름의 양을 증가시키거나 감소시킬 수 있는 유일한 쉐이더
* 테셀레이션 쉐이더도 테셀레이션 레벨을 통해 암묵적으로 가능하지만,
지오메트리 쉐이더는 EmitVertex(), EndPrimitive()를 통해 명시적으로 가능
- 중간에 프리미티브 모드 변경 기능, 예를들어 삼각형들을 입력으로 하여 여러 점이나 선을 출력으로 만들 수 있다.
*버텍스를 확인할 수 있게 삼각형을 점으로 변환하는 지오메트리 쉐이더
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #version 430 core layout (triangles) in; layout (points, max_vertices = 3) out; void main(void) { int i; for (i = 0; i < gl_in.length(); i++) { gl_Position = gl_in[i].gl_Position; EmitVertex(); } } | cs |
- layout (triangles) in : 삼각형을 입력으로 받는다.
- layout (points, max_vertices = 3) : 지오메트리 쉐이더가 점을 생성 시 각 생성하는 점의 갯수의 최대가 3이라는 것을 알린다.
- gl_in.length() : gl_in 배열의 멤버를 루프를 돌면서 수행, 배열의 크기를 알 수 있다.
- EmitVertex() : 지오메트리 쉐이더의 출력으로 점을 생성, 자동적으로 EndPrimitive()를 호출하여, 명시적으로 호출할 필요 없다.
'Software Development > Graphics' 카테고리의 다른 글
OpenGL Super Bible 그래픽스 공부하기 - 3. 파이프라인 따라가기 - 5) 프래그먼트 쉐이더~프레임버퍼 (0) | 2018.01.27 |
---|---|
OpenGL Super Bible 그래픽스 공부하기 - 3. 파이프라인 따라가기 - 4) 프리미티브 어셈블리, 클리핑, 래스터라이제이션 (0) | 2018.01.21 |
OpenGL Super Bible 그래픽스 공부하기 - 3. 파이프라인 따라가기 - 2) 테셀레이션 (0) | 2018.01.21 |
OpenGL Super Bible 그래픽스 공부하기 - 3. 파이프라인 따라가기 - 1) 쉐이더간 데이터 전달 (0) | 2018.01.20 |
OpenGL Super Bible 그래픽스 공부하기 - 2.3 처음 그리는 삼각형 (0) | 2018.01.14 |