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 타입 요소
  • 입력(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