2018년 3월 15일 목요일

3.3 테셀레이션


  1. 테셀레이션
    1. 고차 프리미티브(OpenGL에서는 "패치")를 더 작고 단순한
      여러 개의 렌더링 가능한 프리미티브(ex. 삼각형) 으로 분할하는 작업.
    2. 테셀레이션 엔진은 사각형, 삼각형, 선들을 더 많고 작은 점, 선, 삼각형
      등으로 분할한다.
    3. Vertex shading stage 바로 다음에 위치.
    4. 순서는 [ tessellation control shader - 고정 함수 테셀레이션 엔진 - tessellation evaluation shader ]
      1. 테셀레이션 컨트롤 쉐이더 (tessellation control shader)
        1. 고차 서피스(패치)를 점, 선, 삼각형으로 분할
          1. glPatchParameter
            1. void glPatchParameteri(GLenum pname,
              GLint value);
            2. pname : GL_PATCH_VERTICES
              value : 패치당 생성할 제어점 개수(default 3)
          2. 쉐이더
            1.  layout (vertices=N) out;
              1. N : 패치당 제어점 개수
      2. 테셀레이션 엔진
        1. 패치로 표현되는 고차 서피스를 점, 선, 삼각형 같은 작은 프리미티브로 분할하는 역할 수행
      3. 테셀레이션 이벨류에이션 쉐이더(tessellation evaluation shader)
        1. 테셀레이터에 의해 생성된 각 버텍스에 대해 한 번씩 호출
          1. #version 430 core

            layout (triangles, equal_spacing, cw) in;

            void main(void)
            {
                gl_position = (gl_TessCoord.x * gl_in[0].gl_position ~
            ...
            1. triangles: 삼각형
            2. equal_spacing: 동일 간격으로 버텍스 생성
            3. cw : 시계 방향
            4. gl_TessCoord: 테셀레이터가 생성한 버텍스의 무게중심 좌표
    5.  glPolygonMode
      1. void glPolygonMode(GLenum face,
        GLenum mode)
        https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glPolygonMode.xhtml
      2. 패치의 가장자리만 그리도록 하는 함수
      3. face: 어떤 타입의 폴리곤에 적용 할 것인지.
         - GL_FRONT_AND_BACK(모두 적용)
      4. mode: 폴리곤이 어떻게 그려질 것인지
         - GL_LINE(선, 와이어 프레임 모드)

댓글 없음:

댓글 쓰기