2018년 5월 7일 월요일

5.5.5-[1,2] 여러 텍스쳐 사용하기, 텍스쳐 필터링


  1. 여러 텍스쳐 사용하기
    1. 하나의 쉐이더에서 여러 텍스쳐를 사용하려면 여러 샘플러 유니폼을 만들고, 각각 다른 텍스쳐 유닛을 참조하도록 설정해야 함
      이 때 여러 텍스쳐를 Context에 binding 필요
    2. 최대 유닛 개수
      1. Example
        1. GLint units;
        2. glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &units);
    3. 텍스처를 특정 텍스처 유닛에 바인딩
      1. Example
        1. 텍스쳐 유닛 5 선택
          1. glActiveTexture(GL_TEXTURE0 + 5);
        2. 예약 토큰 사용
          1. GLuint textures[3];

          2. glGenTextures(3, &textures);

          3. glActiveTexture(GL_TEXTURE0);
          4. glBindTexture(GL_TEXTURE_2D, textures[0]);

          5. glActiveTexture(GL_TEXTURE2);
          6. glBindTexture(GL_TEXTURE_2D, textures[2]);
    4. 쉐이더 내에서 샘플러 유니폼이 각각의 텍스쳐 유닛을 참조하도록 설정
      1. glUniform 사용
        1. void glUniform1f(GLint location,
          GLfloat v0);
          1. location: shader 내 uniform 변수의 binding location
          2. v0: 변수에 넣을 값
        2. 쉐이더 코드에서 샘플러는 유니폼으로 선언되기 때문에
          glGetUniformLocation으로 그 위치를 찾아 값을 수정한다.
        3. Example
          1. GLint loc = glGenUniformLocation(mProgram, "name_of_uniform_variable");
          2. glUniform1i(loc, GL_TEXTURE2);
      2. binding 레이아웃 지시어 사용
        1. Example
          1. Shader
            1. layout (binding = 0) uniform sampler2D tex1;
            2. layout (binding = 1) uniform sampler2D tex2;
          2. Code
            1. glUniform1i(0, GL_TEXTURE0);
            2. glUniform1i(1, GL_TEXTURE1);
  2. 텍스쳐 필터링
    1. 텍셀과 화면의 픽셀이 일대일 매칭이 되는 경우는 거의 없음.
    2. 텍스쳐 이미지는 늘어나거나 줄어들어 지오메트리 서피스에 적용된다.
    3. texelFetch
      1. gvec4 texelFetch(gsampler2DRect sampler,
        ivec2 P);
        1. 텍스쳐로부터 특정 정수 텍스쳐 좌표를 사용하여 하나의 텍셀을 읽어온다.
        2. 프래그먼트 대 텍셀 비율이 정수가 아닌 경우에는 이 함수를 사용하지 않는다.
    4. texture
      1. gvec4 texture(gsampler2DRect sampler,
        vec2 P);
        1. 부동소수점 텍스쳐 좌표를 인자로 받음.
        2. [0.0 ~ 1.0] 사이의 범위가 텍스쳐에 매핑된다.
          범위 밖에 있는 값도 가능하며, 이를 사용하여 확대/축소등이 가능
    5. 늘어나거나 줄어든 텍스쳐 맵으로부터 컬러 프래그먼트를 계산하는 작업을
      텍스쳐 필터링이라고 한다.
    6. 텍스쳐를 늘리는 작업을 확대라고 하며, 줄이는 작업을 축소라고 한다.
    7. 확대 및 축소 필터 사용
      1. 샘플러 인자로 GL_TERXTURE_MAG_FILTER, GL_TEXTURE_MIN_FILTER를 사용하며 GL_NEAREST와 GL_LINEAR 사용가능.
      2. GL_NEAREST (최단 인접 필터링)
        1. 가장 단순하며 빠른 필터링
        2. 텍스쳐가 늘어나는 경우 블록 모양의 픽셀을 만든다.
        3. Example
          1. glSamplerParameteri(sampler, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
          2. glSamplerParameteri(sampler, GL_TEXTURE_MAX_FILTER, GL_NEAREST);
      3. GL_LINEAR (선형 필터링)
        1. 텍스쳐 좌표에 가장 가까운 텍셀을 구하고, 텍스쳐 좌표 주변 텍셀의 가중치 평균(선형 보간)을 사용하여 계산.
        2. 텍스쳐가 늘어날 때 흐려지는 효과가 있어서 최단 인접 필터링에 비해 더 자연스럽다.
          1. Example
            1. glSamplerParameteri(sampler, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
            2. glSamplerParameteri(sampler, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
        https://learnopengl.com/Getting-started/Textures

댓글 1개:

  1. 다른 바카라사이트 와 비견될 정도의 후한 이벤트와 서비스는 단연 실시간 라이브카지노 시장의 본보기이며, 큰 축이 되었습니다. '전국여행지원'은 여행대금의 할인을 받을 수 있는 '현민 할인'을 대신하는 관광 더나인카지노 수요의 환기책이다. 도쿄를 제외한 46개 도부현은 이날부터 12월 말까지, 도쿄도는 10월20일~12월20일까지 각각 실시될 예정이다.

    답글삭제