[
graphics
]
Learn OpenGL
Shaders
- shader는 GPU에서 동작하는 작은 프로그램
- C언어와 비슷하게 생긴 GLSL로 작성됨
GLSL
- 기본 types: int, float, double, uint, bool
- 컨테이너 타입: vector, matrices
- vectors
- vecn: n개의 float 타입 요소 -> 기본
- bvecn: n개의 boolean 타입 요소
- ivecn: n개의 interger 타입 요소
- uvecn: n개의 unsigned interger 타입 요소
- dvecn: n개의 double 타입 요소
- vectors
- 입력(in), 출력(out)
- uniforms은 CPU 위의 응용 프로그램에서 GPU위의 shader로 데이터를 전달하는 다른 방법
- global함
파이프라인
- OpenGL의 모든 것은 3차원, 화면은 2차원 -> 3차원에서 2차원으로 변환하는 것이 핵심
- OpenGL의 graphics pipeline으로 진행됨
- 1단계: 3D 좌표를 2D 좌표로 변환
- 2단계: 2D 좌표를 실제 색이 있는 픽셀로 변환
- graphics pipeline
- vertex data[] 입력
- vertex shader (can inject our own shaders)
- geometry shader (can inject our own shaders)
- shape assembly
- rasterization
- fragment shader (can inject our own shaders)
- tests and blending
vertex data[]
- vertex data는 vertex attributes로 표현되어있음
vertex shader
- single vertex를 입력으로 사용함
- 3D 좌표를 다른 3D 좌표로 바꾸는 것이 목적임
- 처리가 완료된 후 좌표는 normalized device coordinates(NDC)가되어 -1.0과 1.0 사이의 값을 가져야함
geometry shader
- 선택적으로 진행됨, 보통 default shader에 맡겨짐
- 주어진 형태를 변환하여 다른 형태로 만들 수 있음
primitive assembly
- vertext shader로부터 모든 vertex를 입력으로 받음
- vertex를 조합하여 shape를 만듦
rasterization
- 결과 primiteve를 픽셀에 대응시킴
- OpenGL에서 fragment는 단일 픽셀을 render하기 위해 필요한 모든 데이터를 말함
fragment shader
- 픽셀의 최종 색상을 계산하는 것이 주 목적
test and blending
- alpha test, blending